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

如果我做 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 rm -r --cached. && git clean -f -d 将工作树带到我们想要的状态 **. git checkout 0d1d7fc3. 创建逆转承诺. git add --all & git commit -m "revert to 0d1d7fc3"


此外,它不会从历史中删除任何东西(压抑或压抑),它产生一个纯粹的承诺,代表我们想要回归的状态。


**当路径被指定(在这里: )时,支票单独留下头部。

其他回答

首先,拿到在某个日期内识别承诺的线条,这样做:

git rev-list -n 1 --before="2009-07-27 13:37" origin/master

它打印承诺识别器,采取线(例如XXXX)并:

git checkout XXXX

首先,什么是头?

HEAD 仅仅是指当前的承诺(后者)在当前的分支上,在任何时间(不包括 git 工作)只能有一个 HEAD。


脱头头

如果你不是最近的承诺 - 意思是,头指的是历史上以前的承诺,它被称为分开的头。

此分類上一篇

此分類上一篇



去支票

git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back

在此点上,您可以创建一个分支,并从此开始工作:

# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>

# Create a new branch forked to the given commit
git checkout -b <branch name>

git reflog 将显示任何更改,更新了 HEAD 并检查所需的 reflog 输入将设置 HEAD 返回此承诺。

git reflog
git checkout HEAD@{...}


“移动”你的头回到所需的承诺。

# 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.

注意: (由于 Git 2.7) 你也可以使用 git rebase --no-autostash 也。


此分類上一篇

最好的方式是:

git reset --hard <commidId> && git push --force

这将重新设置分支到具体的承诺,然后将远程服务器上传与您在当地的同样的承诺。

要小心 - 力量旗,因为它在选择的承诺后删除所有随后的承诺,而没有恢复它们的选项。

对于我和其他人来说,最好的选择是Git重新设置选项:

git reset --hard <commitId> && git clean -f

这对我来说是最好的选择!它是简单的,快速和有效的!


** 注意:** 如在评论中提到的,不要这样做,如果你与其他人分享你的分支,他们有旧承诺的副本。

也从评论中,如果你想要一个更少的“可爱”方法,你可以使用

git clean -i

注意:这得到了很多注意力. 它是超重要,你不这样做,如果你在一个分支,其他人从工作,也(取决于时间框架)不是一个远程,已经与大师合并。

这里是一个更简单的方式,回到以前的承诺(并保持它在一个不承诺的状态,与它做任何你喜欢):

git reset HEAD~1

所以,不需要承诺ID等等:)