我有一个名为dmgr2(开发)的分支,我想从主分支(实时站点)中提取并将所有更改合并到我的开发分支中。有一个更好的方法吗? 在提交更改之后,这是我计划做的事情:
git checkout dmgr2
git pull origin master
这应该将实时更改拉入我的开发分支,还是我有这个错误?
答案 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 log
,gitk
等)来查看您没有的内容,反之亦然。有时这只对暖模糊情感有用(“啊,是的,这实际上就是我想要的”),有时它对完全改变策略很有用(“哇,我还不想要那些东西”)。
最后,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
(对最后阶段的更正,由Tzachi Cohen提供,使用“ -f”强制git在服务器上“更新历史记录”)
现在分支应该与主节点对齐并重新设置基础,还应与远程更新对齐,因此在git log上没有“ behind”或“ ahead”,只需删除所有本地冲突* .orig文件即可保持文件夹“ clean”
答案 3 :(得分:1)
答案 4 :(得分:1)
如果你在 feature-1 分支上并且你想要拉主 --(也许是为了获得最新的合并更新/减少合并冲突的机会),执行:
foo--verbosebar
将 master 拉入你的分支 - 不影响 master!
这会将自你们两个分道扬镳后进入 master 的任何东西拉入你的分支。
如果您的分支已经公开,则可以这样做,因为它不会重写历史记录。
答案 5 :(得分:0)
这对我有用。 为了从master到我的分支获取最新代码
git rebase origin/master