如何从master“git拉”到开发分支

我有一个名为“dmgr2”的开发分支,我想从master分支(实时站点)中提取并将所有更改合并到我的开发分支中。有更好的方法吗?

这是我在提交更改后计划做的事情:

git checkout dmgr2git pull origin master

这应该将实时更改拉到我的开发分支中,还是我弄错了?

1429740 次浏览

您列出的步骤将起作用,但有一个更长的方法可以为您提供更多选择:

git checkout dmgr2      # gets you "on branch dmgr2"git fetch origin        # gets you up to date with origingit merge origin/master

fetch命令可以在merge之前的任何时候完成,也就是说,你可以交换获取和签出的顺序,因为fetch只是转到命名的远程(origin)并对它说:“给我所有你拥有的我没有的东西”,即所有分支上的所有提交。它们被复制到您的存储库,但对远程上任何名为branch的分支命名为origin/branch

在这一点上,你可以使用任何查看器(git loggitk等)来查看你没有的“他们有什么”,反之亦然。有时这只对温暖的模糊感觉有用(“啊,是的,这实际上是我想要的”),有时它对完全改变策略很有用(“哇,我还不想要那些东西”)。

最后,merge命令接受给定的提交,您可以将其命名为origin/master,并在运行merge时尽一切努力将该提交及其祖先引入到您所在的任何分支。您可以插入--no-ff--ff-only来防止快进,或者如果您愿意,仅当结果是快进时才合并。

当你使用序列时:

git checkout dmgr2git pull origin master

pull命令指示git运行git fetch,然后在道德上等价于git merge origin/master。所以这是几乎,与手动执行这两个步骤相同,但有一些细微的差异,可能对您不太关心。(特别是pull运行的fetch步骤带来了只有origin/master,它不会更新存储库中的ref:1任何新的提交最终都只由特殊的FETCH_HEAD引用引用。)

如果您使用更显式的git fetch origin(然后可选地环顾四周)和git merge origin/master序列,您还可以使用远程更新自己的本地master,只需在网络上运行一个fetch

git fetch origingit checkout mastergit merge --ff-only origin/mastergit checkout dmgr2git merge --no-ff origin/master

例如。


1第二部分在git 1.8.4中已经改变了——我说是“修复”,它现在会适时地更新“远程分支”引用。(正如发行说明所说,跳过更新是一个深思熟虑的设计决定,但事实证明更多的人更喜欢git更新它。如果你想要旧的远程分支SHA-1,它默认保存在reflg中,因此可以从reflg中恢复。这也启用了一个新的git 1.9/2.0功能来查找上游重定向。)

在我的本地分支工作,我喜欢在名为dev的开发分支中保持更新。

通常,我更喜欢使用:

git fetchgit rebase origin/dev

我有主更新和我的分支更新,我希望我的分支通过rebasing跟踪主,以正确跟踪所有历史记录。让我们称我的分支为我的分支:

git checkout mastergit pull --rebasegit checkout Mybranchgit rebase mastergit push -f origin Mybranch

我需要根据情况和git提示解决与git mergetoolgit rebase --continuegit rebase --skipgit add -u的所有冲突,直到一切都解决。

注意:最后阶段的更正,由Tzachi Cohen提供,使用“-f”强制git在服务器上“更新历史记录”。

现在,分支应该与master和rebase对齐,也与远程更新,所以在git log没有“后面”或“前面”,我只需要删除所有本地冲突*. orig文件以保持文件夹“干净”。

这适用于从master获取最新代码到我的分支:

git rebase origin/master

如果您的历史记录不匹配并且无论如何都想合并它,您可能希望使用它:

git pull origin master --allow-unrelated-histories

有关更多信息,请参阅““致命的:拒绝合并无关的历史”Git错误”。

如果你上的是一号专题分支和你想拉师父--(可能是为了获得最新的合并更新/减少合并冲突的机会),请执行:

git pullgit merge origin/master

master拉入你的分支-不影响master!

这将把自从你们两个分道扬镳后进入主的任何东西拉到你的分支中。

如果您的分支已经公开,则可以这样做,因为它不会重写历史。

这是我的解决方案:

git checkout mybranchgit rebase master mybranchgit add .git rebase --continuegit commit -a -m "test"git pullgit push

使用git add .暂存您的文件。

这是另一种将主更改添加到分支的解决方案:

git checkout mybranchgit fetch origingit merge origin/master

当您使用rebase时,您的git历史很清楚,但使用merge origin/master更容易。

  1. 首先,使用以下命令获取代码:

    git fetch
  2. 然后使用:

    git rebase origin/dev

如果开发是干净的,只是想更新主要大师更改

  • git checkout dev
  • git pull origin <main or master>
  • git push origin dev