如何在错误提交之前将状态合并到Git中的当前头部?
错误地由另一个人合并重置我在服务器上的更改,在我获取并合并远程主分支后,我的更改在本地消失了。与此同时,更正确的提交被推送到远程服务器并保持在主分支的当前头部。
我需要在错误合并之前将状态合并到我当前的主头。
我怎么能做到这一点?
我已经尝试了@Drecker的answer。
git revert -m 2 <SHA_hash_of_merge_commit>
我现在回复了正确的文件内容,但是我从第二个人那里丢失了正确的文件内容。我承诺了,但不要推它。我从那里创建了一个新的分支restore
。现在,第二人称内容在远程master
分支中是正确的,并且我的内容在本地restore
分支中是正确的。
如何重新合并两个分支,以便我从两个分支获得正确的内容?
答案 0 :(得分:0)
更新:您可以阅读此帖:Undo a Git merge that hasn't been pushed yet
To&#34;撤消&#34;已经提交(和推送)的合并,您可以使用
git revert -m <parent_number> <SHA_hash_of_merge_commit>
parent_number
是该合并的父母的索引编号 - 这是必需的,因为git不知道您要拒绝哪个分支(从1开始索引)。这样,将创建一个新的提交,删除由被拒绝的分支
其他(未记录)选项是使用
git rebase -i <SHA_of_commit_to_which_you_want_to_change_histrory>
通过这种方式,您将以交互方式选择当前HEAD中您想要的提交,而不是
警告:这样你实际上改变了git历史记录!您可能会丢失一些更改(在任何其他分支中都没有)并且在您的同事提取更改时会导致更多问题
答案 1 :(得分:0)
您需要在第一次合并之前恢复状态。
你可以使用git reflog + git reset来实现它,这样(我假设分支是master):
git reflog master
将返回本地主参考的历史记录,输出类似于此:
1904ece master@{0}: commit: fixed styles
ba185a3 master@{1}: commit: fade transition for angular pages|
b06d0a5 master@{2}: commit: fixed detail view
792af52 master@{3}: commit (merge): Merge branch 'origin/master' into master
128dd58 master@{4}: commit: fixed save of searchs
...
注意合并提交,用&#34;提交(合并)&#34;注明,也许那些是您尝试的合并提交&#34;撤消&#34;,继续你可以使用git reset命令,这样:
git stash # save all local changes on index and WC just in case
git reset --hard master@{4}
注意我在这里使用master @ {4},因为找到了合并提交为master @ {3}
执行此操作后,您需要再次执行合并,您可以多次执行此操作,以便重新执行合并操作