我如何从我目前的状态转向在某个承诺上拍摄的截图?
如果我做 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?
如果你想“不承诺”,删除最后的承诺消息,并将修改的文件重新排序,你会使用命令:
git reset --soft HEAD~1
--soft 表明未订购的文件应该作为工作文件相反的 --hard 将排除它们. HEAD~1 是最后的订单. 如果你想旋转 3 订单,你可以使用 HEAD~3. 如果你想旋转到一个特定的修订号码,你也可以这样做,使用它的 SHA 标签。
这是一个非常有用的命令,在你犯了错误的事情的情况下,你想放弃最后的承诺。
来源: http://nakkaya.com/2009/09/24/git-delete-last-commit/
这里有很多复杂和危险的答案,但它实际上很容易:
git revert --no-commit 0766c053..HEAD
git commit
这将把一切从头转向承诺哈希,这意味着它将重现承诺状态在工作树上,就好像每一个承诺之后 0766c053 已被推回。
(没有承诺的旗帜允许Git同时转换所有承诺,否则你将被邀请为每个承诺在范围内发出一个消息,将你的历史与不必要的新承诺。
这是一个安全和容易的方式,回到以前的状态. 没有历史被摧毁,所以它可以用于已经公开的命令。
好吧,回到以前的承诺在Git是相当容易的......
返回,不遵守变更:
git reset --hard <commit>
返回,保持变更:
git reset --soft <commit>
解释:使用 git 重新设置,您可以重新设置到一个特定的状态。
但当你看到区别是使用两个旗帜 - 软和 - 硬,通过默认 git 重新设置使用 - 软旗,但这是一个很好的做法,总是使用旗帜,我解释每个旗帜:
软
默认旗帜如所述,不需要提供它,不改变工作树,但它添加了所有更改的文件准备承诺,所以你回到承诺状态,这些变更到文件失踪。
硬
要小心这个旗帜,它恢复了工作树和跟踪的文件的所有变化,一切都将消失!
我还创建了下面的图像,这可能发生在与Git合作的现实生活中:
此分類上一篇
重新定位的变革和承诺
Git 的能力正如你想要的那样创作承诺,这意味着有时你需要在 git 添加中进行的更改中取消更改。
Git 不知道这些变化,因为它们从未被承诺,一旦你运行这个命令,就没有办法恢复这些变化。
最后,您可以使用 --mixed 重新设置工作树,而无需排序任何变更。
回归承诺
你可以使用 -no-commit,或者你可以使用 -n 告诉 Git 进行逆转,但停止承诺改变。
否则,您可能会通过尝试转换尚未存在的代码来混淆 Git。