我如何从我目前的状态转向在某个承诺上拍摄的截图?

如果我做 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 <SHA>

如果不需要从前的承诺到主,并只是拒绝所有变更,做:

git reset --hard <SHA>

其他回答

好吧,回到以前的承诺在Git是相当容易的......

返回,不遵守变更:

git reset --hard <commit>

返回,保持变更:

git reset --soft <commit>

解释:使用 git 重新设置,您可以重新设置到一个特定的状态。

但当你看到区别是使用两个旗帜 - 软和 - 硬,通过默认 git 重新设置使用 - 软旗,但这是一个很好的做法,总是使用旗帜,我解释每个旗帜:


默认旗帜如所述,不需要提供它,不改变工作树,但它添加了所有更改的文件准备承诺,所以你回到承诺状态,这些变更到文件失踪。


要小心这个旗帜,它恢复了工作树和跟踪的文件的所有变化,一切都将消失!


我还创建了下面的图像,这可能发生在与Git合作的现实生活中:

此分類上一篇

我相信有些人可能来到这个问题,想知道如何回归他们在主人中所做的承诺的变化 - 也就是说,把一切都扔掉,回到起源 / 主人,在这种情况下,这样做:

git reset --hard origin/master

https://superuser.com/questions/273172/how-to-reset-master-to-origin-master

可以用 Sourcetree 做得更容易。 只需正确点击承诺,您正在寻找并从菜单中选择“检查”。

此分類上一篇

要保持以前的承诺转向主,并转向以前的承诺,做:

git reset <SHA>

如果不需要从前的承诺到主,并只是拒绝所有变更,做:

git reset --hard <SHA>

这很大程度上取决于你指的是“逆转”。

暂时转换到另一个承诺

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

git checkout -b old-state 0d1d7fc32

要回到你所在的地方,只需检查你所在的分支再次(如果你做了变化,如往常交换分支时,你将不得不处理它们,你可以重新设置,把它们扔掉;你可以打破,支票,打破,把它们带到你身边;你可以承诺它们到一个分支,如果你想要一个分支在那里。

硬删除未发表的承诺

如果,另一方面,你真的想摆脱你从那时起所做的一切,有两种可能性。

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

如果你混乱,你已经扔掉了你的地方变化,但你至少可以通过重新设置回到你以前的地方。

下一篇: 与新承诺发布的承诺

# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

#Similarly, you can revert a range of commits using commit hashes (non inclusive of first hash):
git revert 0d1d7fc..a867b4a

# Reverting a merge commit
git revert -m 1 <merge_commit_sha>

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

您也可以在此情况下找到这个答案有用:我如何将头转回以前的位置?(解密头) & Undo 承诺