代码之家  ›  专栏  ›  技术社区  ›  Ken Y-N

如果远程更新,撤消本地合并

git
  •  1
  • Ken Y-N  · 技术社区  · 6 年前

    我有以下几点 git 工作流程:

    # finish locally committing to feature/new_thing
    git push origin feature/new_thing
    git checkout develop
    git pull # Just in case I get a warning
    git merge feature/new_thing
    git push origin develop
    

    这在99%的情况下有效,但在另外1%的情况下,这种情况会发生:

    #Me                             #Other dev
    git push origin feature/new_thing
                                    git merge feature/other_new_thing
    git checkout develop
                                    git checkout develop
    git pull
                                    git pull
    git merge feature/new_thing
                                    git merge feature/other_new_thing
                                    git push origin develop
    git push origin develop
    

    push 可预见的失败有:

    error: failed to push some refs to 'git@server.git'
    

    git reset HEAD~ 删除我的分支,然后 git pull 希望再次合并。我通常最后 reset 婷婷回到枝头前,重新站起来- pull 取消我的登机手续

    必须有一个简单的方法来做到这一点!我试过用 git-workflow 有一段时间,但它经常卡住,需要更多的人工干预。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Useless    6 年前

    origin/develop 副本过期了。在决定如何处理之前,我想知道发生了什么变化,所以我通常会跑步

    $ git fetch
    

    首先,让我看看 git log --all --graph --decorate gitk --all 或者类似的。

    如果您决定要在最新的基础上重新调整提交,您可以使用

    $ git pull --rebase
    

    如果它不是一个干净的基础,你会着手修复它-如果你认为这会发生(或它已经做了,你跑了) git rebase --abort ),您可能希望手动重置并重新执行合并:

    $ git reset --hard origin/develop
    

    (我倾向于在合并提交时避免使用HEAD~,因为我永远记不清哪个父级是哪个父级)。

        2
  •  1
  •   miqh    6 年前

    第一个,也是我通常采用的一个,是重新调整你的版本 develop 在远程版本的 . 如果存在合并冲突,您可以边走边解决(即。 rebase --continue

    # On local `develop`
    git rebase origin/develop
    

    如果在执行过程中发现增量合并冲突太多,请使用 --interactive 选项的基础和预挤压你所有的承诺 发展 发展

    发展 你的版本。这将不可避免地创建一个合并提交,如果您希望保持Git历史尽可能线性的话,这可能会很难看。

    # On local `develop`
    git merge origin/develop