3

到现在为止,如果我曾经提交并将错误推送到主分支,我的解决方法是,假设 git 日志看起来像

commit bad_hash
commit another_bad_hash
commit yet_another_bad_hash
commit good_hash

我过去“解决”这种情况的方式是:

git reset --hard good_hash
git push -f origin master

是的,这会起作用......但看起来不是很优雅,因为它有效地删除了提交历史。

因此,在破坏了我的自我的情况之后,我检查了更好的方法,并提出了 git revert 方法,基本上我现在使用

git revert bad_hash another_bad_hash yet_another_bad_hash
git push origin master

git revert 将创建三个提交(每个恢复的哈希一个),之后,需要推送来更新远程。

现在,问题是,这种策略是否正确?对我来说看起来比重置要好得多——硬,因为回购的历史没有被中继,如果最终有人想检查为什么会出现问题,他们总是可以做一个

git diff bad_hash

这个推理是正确的还是我仍然缺少基本概念。

谢谢

4

3 回答 3

5

此工作流程解释了您需要了解的所有内容。恕我直言,这是一个很好的资源。

致谢:贾斯汀·希勒曼

Git混乱工作流程

于 2013-01-08T21:43:55.953 回答
2

Yes -- git revert is absolutely the appropriate approach in this situation, as it preserves the history of the bad commit having been made, then later removed.

于 2013-01-08T21:59:47.223 回答
1

通常对于“正在进行的工作”,我会进行一系列提交,然后git rebase -i base清理我的历史记录——考虑到读者(可能是你自己)以后会发现这更容易看到。

一旦我推动它,我会认为历史是不可变的,然后会更喜欢这种git revert方法。

于 2013-01-08T22:36:58.050 回答