我以相当线性和基本的方式使用git,但我遇到了一个我很少遇到的问题,我不确定如何修复。
我在我的一个分支机构中过早地提出了一些建议。它很快就会推出,但我还没准备好推出它。我试图找出最好的方法来让我正在处理的分支指向先前的提交,然后我将这个分支合并到主分支中,这样当这个分支合并到主分支时它没有引用最近的提交。
使用git log(git log --oneline
),我有以下内容:
d17be71 (HEAD -> qa, origin/qa) Fix footer in jsp.
bc6dde8 (featureBranch1) Correct company logo.
因此d17be71
被意外添加到qa中,qa将合并为master。我不希望这些更改合并为master,但我不想丢失它们。我希望bc6dde8
合并到master中,在此代码成功启动之后,我将d17be71
合并回qa,然后将其合并到master中,然后启动它。
对合并,分支和HEAD
:
但我仍然有点迷失正确的方法应该是什么。我假设我可以将HEAD
指向bc6dde8
,这将作为最后一次提交,以便当我合并为master时,d17be71
将没有被合并到主人但仍然存在于我的qa分支上,但我没有读过任何证实这实际上会发生的事情。
我想我可以创建qa的新分支,然后回到qa并恢复到bc6dde8
并删除我的最后一次提交,然后在启动后合并回qa,但我假设我不喜欢必须这样做。只是有一个困难的时间弄清楚究竟是什么,如果不是那样我应该这么做。
我该如何纠正这个错误?
答案 0 :(得分:3)
我想最简单的解决方案是
$ virtualenv name_of_virtualenv_directory
$ name_of_virtualenv_directory/bin/python setup.py install
(注意git checkout master
git merge qa^
,告诉git您正在合并^
引用的提交的父提交。)
在我的测试中,git看到了我正在做的事情,甚至修改默认合并消息说
qa
(当然,你可以删除文本Merge branch 'qa' (early part)
,如果你希望它最终看起来(大多数情况下),就像在将排除的提交添加到(early part)
分支之前发生了合并一样。或者你可能会以通常用于合并提交的方式更改提交消息。)
你创建一个新分支并重置qa分支的解决方案也有效,并且 (请注意术语;这是qa
。要reset
创建新的提交,以撤消先前提交的更改。虽然这是另一个用户的建议答案,但我不会# 39;推荐它,因为它在历史中放置了不必要的混乱。[1])这样做的主要诀窍是,你希望revert
重新合并为快进;但这不是一个伎俩,因为它应该是默认行为,只要在此期间没有其他任何内容添加到d17be71
。
还有许多其他可能的解决方案。解决方案的变体,使用reflog而不是临时分支,例如:
qa
[1]:有些时候git checkout qa
git reset --hard HEAD^
git checkout master
git merge qa
git checkout qa
git reset --hard qa@{1}
有意义,而不是revert
。主要原因是避免编辑共享历史记录。但是,如果您要分享历史记录编辑,那就非常重要了,因为历史记录编辑是暂时的,所以情况并非如此。
答案 1 :(得分:0)
你可以简单地git revert d17be71
。它不会删除d17be71
,而是生成一个基本上取消d17be71
的还原提交。记下该还原提交的哈希值。将qa
合并到master
后,运行另一个git revert the-revert-commit-hash
,它会取消还原,并有效恢复d17be71
更改。