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

如果我做 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 log 搜索最后一个工作承诺,然后运行:

git rebase --onto <commitId>

当远程分支重新运行时,您可以

git pull --rebase

这种方法比临时变更的Git支票更好,因为你不处于分离状态。

其他回答

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

git undo

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

# Remove the latest three commits
git undo 3

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

最好的方式是:

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

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

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

重新定位的变革和承诺

Git 的能力正如你想要的那样创作承诺,这意味着有时你需要在 git 添加中进行的更改中取消更改。

Git 不知道这些变化,因为它们从未被承诺,一旦你运行这个命令,就没有办法恢复这些变化。

最后,您可以使用 --mixed 重新设置工作树,而无需排序任何变更。

回归承诺

你可以使用 -no-commit,或者你可以使用 -n 告诉 Git 进行逆转,但停止承诺改变。

否则,您可能会通过尝试转换尚未存在的代码来混淆 Git。

如果你想暂时转换变更,因为

有人承诺的代码正在破坏构建或破坏你正在工作的功能

您可以使用 git log 搜索最后一个工作承诺,然后运行:

git rebase --onto <commitId>

当远程分支重新运行时,您可以

git pull --rebase

这种方法比临时变更的Git支票更好,因为你不处于分离状态。