我如何从我目前的状态转向在某个承诺上拍摄的截图?
如果我做 git 登录,那么我会得到以下输出:
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
我如何转向11月3日的承诺,即承诺0d1d7fc?
假设你正在谈论大师和相应的分支(也就是说,这可能是你所关心的任何工作分支):
# Reset local master branch to November 3rd commit ID
git reset --hard 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
# Reset remote master branch to November 3rd commit ID
git push -f origin 0d1d7fc32e5a947fbd92ee598033d85bfc445a50:master
我在博客文章中找到答案(现在不再存在)
请注意,这就是重定向和强迫变更到远程,所以如果你的团队中的其他人已经吸引了Git,你会为他们造成问题。
使用逆转(见其他答案)更好,而不是重新设置. 如果你是一个单人团队,那么这可能并不重要。
我已经尝试了很多方式来逆转Git的本地变化,如果你只是想逆转到最近的承诺状态,这似乎是最好的。
git add . && git checkout master -f
简短的描述:
它不会创建任何命令,因为 git revert 做. 它不会分开你的头像 git checkout <commithashcode> 做. 它将超越所有的本地变更,并删除所有的添加文件,因为最后的命令在分支。
我找到了一个更方便和简单的方式来实现上面的结果:
git add . && git reset --hard HEAD
HEAD 指向您当前分支的最新承诺。
它与 boulder_ruby 提出的代码相同,但我添加了 git add. 之前 git reset --hard HEAD 删除所有新的文件创建自最后的承诺,因为这是大多数人期望我相信,当转向最新承诺时。
但是,这里被问及如何取消具体的承诺,在这种情况下,它是取消过去的三个承诺,回到11月3日的承诺。
你可以用下调来做到这一点:
git rebase -i HEAD~4
这将列出你的最后四个承诺。
现在你有取消命令的选项,你用 drop 文本这样做。
只需在键盘上点击我,并在承诺旁边,您要删除写下滴,而不是默认选择在键盘上,点击输出和 :wq
要确保承诺被删除,写下:
git log
你會看到,當滴滴被移除時,你得救的行為。
要将这些变化推到您的远程分支,请写下:
git push --force