Git 从 Remote Master 变基

Git Rebase from Remote Master

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

这会有所帮助:

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

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

谢谢。

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

让我们谈谈这两种方法:

变基:

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

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

git checkout master

然后用远程更改更新它:

git pull

它将 运行 一个 git 在你的 git master 分支的幕后合并获取。

然后回到你的分支:

git checkout my_branch

然后和master一起rebase:

git rebase master

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

您可以使用:

git push -f origin my_branch

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

或者您可以删除您的远程分支,然后将其正常推送回服务器:

git push origin my_branch

合并:

使用这种方法,你最终会在你的历史上进行合并提交,随着时间的推移,日志可能会变得混乱,但是这也有一些好处,如果你确实有冲突,你需要只解决一次,当你合并时,如果你在变基时有冲突,你可能不得不多次解决它,因为它会尝试将你的提交一个一个地应用到新的远程提交上。

要做到这一点,您只需转到您的 master 分支并更新它:

git checkout master

和:

git pull

会像我们之前看到的那样做

现在回到你的分支:

git checkout my_branch

和运行:

git merge master

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

git push origin my_branch

就是这样,我希望你觉得这对你有帮助,你可以用更少的步骤完成这个,但这些只是我喜欢做的步骤,它们可能不是更短的步骤,但我觉得这样更安全。当然还有很多关于合并和变基的选项,我建议你多看看它们,它们非常有用。

How do I pull down their changes from the master branch on GitHub so that it updates my branch locally

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

AND on GitHub as well (Right now on GitHub, it says I am 1 commit ahead and 19 commits behind 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

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

git pull origin master --rebase