git从master转到开发分支

时间:2013-11-20 16:53:53

标签: git branch pull

我有一个名为dmgr2(开发)的分支,我想从主分支(实时站点)中提取并将所有更改合并到我的开发分支中。有一个更好的方法吗? 在提交更改之后,这是我计划做的事情:

git checkout dmgr2
git pull origin master

这应该将实时更改拉入我的开发分支,还是我有这个错误?

6 个答案:

答案 0 :(得分:553)

您列出的步骤可行,但有更长的方法可以为您提供更多选择:

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

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

此时,您可以使用任何查看器(git loggitk等)来查看您没有的内容,反之亦然。有时这只对暖模糊情感有用(“啊,是的,这实际上就是我想要的”),有时它对完全改变策略很有用(“哇,我还不想要那些东西”)。

最后,merge命令接受给定的提交,您可以命名为origin/master,并执行将该提交及其祖先引入的任何内容,以及当您执行的任何分支时运行merge。您可以插入--no-ff--ff-only以阻止快进,或仅在结果是快进的情况下合并,如果您愿意的话。

使用序列时:

git checkout dmgr2
git pull origin master

pull命令指示git运行git fetch,然后指导git merge origin/master的道德等价物。因此,几乎与手动执行这两个步骤相同,但有一些微妙的差异可能对您不太关注。 (特别是由fetch运行的pull步骤只会带来 origin/master,并且它不会更新您的仓库中的参考: 1 任何新的提交都会被特殊的FETCH_HEAD引用引用。)

如果您使用更明确的git fetch origin(然后可选择环顾四周)然后使用git merge origin/master序列,您还可以使用遥控器更新您自己的本地master,只有一个fetch在网络上运行:

git fetch origin
git checkout master
git merge --ff-only origin/master
git checkout dmgr2
git merge --no-ff origin/master
例如


1 第二部分已被更改 - 我说“固定”-in git 1.8.4,现在机会性地更新“远程分支”引用。 (正如发行说明所说,这是一个故意的设计决定,跳过更新,但事实证明,更多的人更喜欢git更新它。如果你想要旧的远程分支SHA-1,它默认保存在因此可以从reflog中恢复。这也启用了一个新的git 1.9 / 2.0功能来查找上游的rebase。)

答案 1 :(得分:8)

情境:在我的本地分支机构工作,但我喜欢在名为dev的开发分支中保持更新。

解决方案:通常,我更喜欢这样做:

git fetch
git rebase origin/dev

答案 2 :(得分:1)

场景

我有master更新和分支更新,我希望我的分支通过重新部署来跟踪master,以便正确跟踪所有历史记录,我们称我的分支为Mybranch

解决方案

git checkout master    
git pull --rebase    
git checkout Mybranch    
git rebase master
git push -f origin Mybranch
  • 需要根据情况和git提示使用git mergetool&解决所有冲突,git rebase --continue,git rebase --skip,git add -u,直到所有问题解决为止

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

现在分支应该与主节点对齐并重新设置基础,还应与远程更新对齐,因此在git log上没有“ behind”或“ ahead”,只需删除所有本地冲突* .orig文件即可保持文件夹“ clean”

答案 3 :(得分:1)

git pull origin master --allow-unrelated-histories

如果您的历史记录不匹配,并且仍要合并,则可能要使用它。

推荐here

答案 4 :(得分:1)

如果你在 feature-1 分支上并且你想要拉主 --(也许是为了获得最新的合并更新/减少合并冲突的机会),执行:

foo--verbosebar

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

这会将自你们两个分道扬镳后进入 master 的任何东西拉入你的分支。

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

答案 5 :(得分:0)

这对我有用。 为了从master到我的分支获取最新代码

git rebase origin/master