【问题标题】:Git Rebase from Remote Master来自 Remote Master 的 Git Rebase
【发布时间】:2017-07-27 02:33:03
【问题描述】:

之前可能有人问过这个问题,但我对术语有点困惑,所以我不确定哪些命令是完成我需要完成的任务的正确命令。现在我有一个与我的团队一起工作的 GitHub 存储库。在那里,我为一项任务做了一个分支。我将存储库克隆到本地计算机,然后在本地签出该分支。我开始进行我希望继续进行的更改...在进行这些更改时,我的团队一直在更新他们的代码并将更改推送回 GitHub 上的主分支。我如何从 GitHub 上的 master 分支中提取他们的更改,以便它在本地和 GitHub 上更新我的分支(现在在 GitHub 上,它说我提前 1 次提交,落后于 master 19 次提交)。感谢您的建议...这将是我计划定期做的事情,因此学习正确的流程对我很有帮助...

【问题讨论】:

    标签: git github branch rebase


    【解决方案1】:

    您可以在这里应用一系列方法来完成您想要的。这可能取决于您的存储库策略。例如,如果您重新设置分支,您将无法将其推送回服务器,您将不得不使用 -f 推送它或删除远程分支并推送一个新分支。有人可能会说,一旦您已经将分支推送到服务器,rebase 就不是一个好方法,如果这是您的仓库的策略,那么您必须将 master 合并到您的分支中,然后将其推送回远程。

    让我们来谈谈这两种方法:

    变基:

    我个人更喜欢做更多的变基,但前提是我确定没有其他人正在使用我在遥控器上推送的分支。我喜欢变基,因为这最终会留下更清晰的历史记录,它这样做是因为它从分支中删除了我的更改,应用远程更改,然后将我的更改应用回顶部,但是这样做,它会更改提交哈希并且确实如此与您之前提交的相同提交不匹配,因此您必须使用 -f 推送它或删除远程分支并重新创建它。

    我会这样做,在您的本地存储库上,我会转到主分支:

    git checkout master

    然后使用远程更改对其进行更新:

    git pull

    它将在你的 git master 分支上运行 git fetch 并在后台合并。

    然后回到你的分支:

    git checkout my_branch

    然后用 master 变基:

    git rebase master

    如果一切运行没有冲突,你就可以开始了。

    你可以使用:

    git push -f origin my_branch

    (小心!此命令将覆盖您的远程分支,在使用此命令之前确保您的 rebase 上一切正常是非常危险的。)

    或者你可以删除你的远程分支,把它正常推送回服务器:

    git push origin my_branch

    合并:

    使用这种方法,您最终会在历史记录中合并提交,并且日志可能会随着时间的推移而变得混乱,但这也有一些优势,如果您确实有冲突,则需要解决它只有一次,当你合并时,如果你在 rebase 时发生冲突,你可能需要多次解决它,因为它会尝试将你的提交一个一个地应用到新的远程提交上。

    为此,您只需转到您的主分支并更新它:

    git checkout master

    和:

    git pull

    会和我们之前看到的一样

    现在回到你的分支:

    git checkout my_branch

    然后运行:

    git merge master

    如果你没有任何冲突,你可以去,你可以将它推送到服务器,如果你只需要解决它,你也可以将它正常推送到服务器,因为现在你解决了新提交时发生冲突,本地分支和远程分支之间没有任何差异。

    git push origin my_branch

    就是这样,我希望这对您有所帮助,您可能可以用更少的步骤完成此操作,但这只是我喜欢做的步骤,它们可能不是更短的步骤,但我觉得这样更安全。当然,有很多关于合并和变基的选项,我建议您多研究一下,它们非常有用。

    【讨论】:

    • 它在抱怨我的 pom.xml。有没有一种简单的方法可以忽略我在该文件上的本地更改,从 rebase 中拉下更新的更改,然后在该文件本地重新进行这些更改?它们是很小的变化,所以我觉得这会更容易。
    • 我能够避免 pom.xml 我纠正冲突,然后对其进行添加和提交。但是现在我的分支在本地说“你的分支和 'origin/' 已经分歧了,并且分别有 22 和 1 个不同的提交。(使用“git pull”将远程分支合并到你的分支)没有提交,工作树清洁”有什么想法吗?
    • 不确定我是否理解,您是否提交了更改,然后您尝试了变基?在那之前你没有任何承诺吗?因为就像我说的:“......如果你重新设置你的分支,你将无法将它推送回服务器,你将不得不使用 -f 推送它或删除远程分支并推送一个新分支”
    • 没关系。我切换到合并,它工作得很好。我确实必须添加冲突的文件。这不是一个干净的提交历史,但对于这个特定的实例,它很好。只要它有效,它就做到了。谢谢!
    【解决方案2】:

    那会很有帮助:

    $ git config --global branch.master.rebase true
    

    # cat ~/.gitconfig
    [user]
            name = xx
            email = xx@xx.com
    [branch "master"]
            rebase = true
    

    谢谢。

    【讨论】:

    • 好的,一旦我添加了该配置,完成我需要的命令是什么?那我可以做一个 git rebase 吗?
    • 只是 git pull。远程提交将合并到本地。
    • 您必须在答案中添加更多信息。只是一系列命令对将来的目的没有用处。
    • 当我从本地分支推回我的 GitHub 存储库时,我需要做一些特别的事情吗?
    • @user1943674 只需推送并检查差异。说真的。
    【解决方案3】:

    我如何从 GitHub 上的 master 分支中提取他们的更改,以便 它会在本地更新我的分支

    git checkout master
    git pull
    git checkout <your-branch>
    git rebase master
    

    在 GitHub 上也是如此(现在在 GitHub 上,它说我是 1 次提交 领先和 19 次提交落后于 master)。

    git commit -m "I do this, do that"
    

    将您的分支上传到远程

    git push -u <remote-name> <your-branch-on-remote>
    

    合并到 master 并将 master 上的更新上传到远程

    git checkout master
    git merge --no-ff <your branch>
    git push -u <remote-name> master
    

    【讨论】:

      【解决方案4】:

      在一行中完成此操作的最佳方法...

      git pull origin master --rebase
      

      【讨论】:

      • 我认为 Chris 正在询问如何在合并/rebase 之后将他的更改推送到 Github
      • 我认为对使用rebase 的(相当初学者级别的)git 问题的答案应该总是带有一个警告/免责声明,关于重写已经与他人共享的历史记录时可能产生的负面后果(推送到远程)。
      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 2018-10-18
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2012-09-05
      • 1970-01-01
      相关资源
      最近更新 更多