意外地将远程分支拉到我的功能分支,解决冲突并再次提交。这可以还原吗?

时间:2018-03-17 08:28:38

标签: git git-merge git-pull git-revert

我不小心将一个远程分支拉入我的本地分支,解决了合并的冲突,并再次对功能分支进行了一些不同的更改。我是否可以恢复远程分支的拉力而不会丢失我之后提交的提交或者还有什么可以解决这种情况?工作流程类似于:

git checkout my_feature
git pull origin wrong_branch

git commit -am "Resolving merge conflict"
git push

git commit -m "Some other commit to my_feature"
git commit -m "Another commit to my_feature"
git push

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题;最简单的方法可能是在合并之前重置为状态,然后挑选你所做的提交。

git reset --hard abc123^  # where abc123 is the hash of the merge
                          # commit. The ^ refers to the first parent of
                          # that commit, i.e. the commit before the
                          # merge happened.

git cherry-pick cde234    # where cde234 is the hash of a commit that
                          # you made after the merge

另一种方法是使用带有git rebase标记的--onto;有关详细信息,请参阅man git-rebase

请务必备份,以防万一。

请注意,这意味着您正在更改历史记录。要将这些更改发送到遥控器,您需要强制推送; man git-push寻找--force--force-with-lease。请三思而后行,并注意如果有其他人在同一个分支上工作,他们已经撤消了这些更改,他们将需要采取措施通过git resetgit rebase更正其历史记录。另请注意,如果其他人在您上次提取后推送了更改,则可能无意中删除了这些更改。使用--force-with-lease代替--force可以帮助您避免这种情况。在许多情况下,改变历史是不值得的麻烦。