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

如果我做 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的本地变化,如果你只是想逆转到最近的承诺状态,这似乎是最好的。

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 删除所有新的文件创建自最后的承诺,因为这是大多数人期望我相信,当转向最新承诺时。

其他回答

假设你正在谈论大师和相应的分支(也就是说,这可能是你所关心的任何工作分支):

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

不仅仅是Git Push。

Rogue 编码器?

工作自己,只是想要它工作吗? 遵循下面的指示,他们已经为我和许多其他人工作了多年。

阅读下面的评论,考虑其他答案,并与你的团队讨论,在你做一些漏洞之前。

将工作复制转换为最新的承诺

要转向以前的承诺,忽略任何变化:

git reset --hard HEAD

在哪里,头部是您当前分支的最后承诺

将工作副本转换为老年委托

要转向比最近的承诺更古老的承诺:

# Resets index to former commit; replace '56e05fced' with your commit code
git reset 56e05fced 

# Moves pointer back to previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to 56e05fced"

# Updates working copy to reflect the new commit
git reset --hard

# Push your changes to respective branch
git push -f

信用去一个类似的 Stack Overflow 问题,转向一个承诺由一个 SHA hash 在 Git?.

尝试重定向到所需的承诺:

git reset <COMMIT_ID>

查看 COMMIT_ID 使用:

git log

这将将所有更改的文件重定向到未添加状态。

现在,您可以查看所有未添加的文件

git checkout .

要检查您的使用变更:

git log

更新

如果你有一個,只承諾在你的repo,嘗試

git update-ref -d HEAD

有一个命令(不是核心Git的一部分,但它在Git-extra包中)具体用于逆转和排序旧命令:

git undo

对于男性页面,它也可以用作如下:

# Remove the latest three commits
git undo 3