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

如果我做 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 branch -f <<branchname>> 0d1d7fc32e5a947fbd92ee598033d85bfc445a50

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的逆转一样)。

替代方案1:硬和软重组

这是查尔斯·贝利(Charles Bailey)的解决方案的一个非常轻微修改的版本,以便在Git中通过SHA的Hash转向一个承诺吗?

# Reset the index to the desired commit
git reset --hard <commit>

# Move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}

# Commit the changes
git commit -m "Revert to <commit>"

这基本上是通过使用软重组将离开指数/重组区域的前承诺的状态,然后你可以承诺。

替代方案2:删除现有树,并用新树取代

git rm -r .
git checkout <commit> .
git commit

类似于替代 #1,这重复了当前工作副本中的 <commit> 状态. 首先需要做 git rm 因为 git checkout 不会删除自 <commit> 以来添加的文件。

返回(或逆转):

1. git revert --no-commit "commit-code-to-remove" HEAD
(e.g. git revert --no-commit d57a39d HEAD)
2. git commit
3. git push

尝试上面的两个步骤,如果你发现这是你想要的,那么 git push。

如果你发现什么是错误的,做:

git revert --abort

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

返回,不遵守变更:

git reset --hard <commit>

返回,保持变更:

git reset --soft <commit>

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

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


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


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


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

此分類上一篇