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

以下是我在提交更改后的计划:

git checkout dmgr2
git pull origin 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 re base--skip和git add-u解决所有冲突,直到所有问题都得到解决。

注意:在Tzachi Cohen的帮助下,对最后一个阶段进行了更正,使用“-f”强制git在服务器上“更新历史记录”。

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

其他回答

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

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

fetch命令可以在合并之前的任何时候执行,也就是说,您可以交换fetch和checkout的顺序,因为fetch只会转到指定的远程(源)并对它说:“给我所有我没有的东西”,即所有分支上的所有提交。它们被复制到您的存储库中,但为远程上任何名为branch的分支命名为origin/branch。

此时,您可以使用任何查看器(gitlog、gitk等)来查看您没有的“他们有什么”,反之亦然。有时这只对温暖的模糊感觉有用(“啊,是的,这实际上是我想要的”),有时对完全改变策略有用(“哇,我还不想要那种东西”)。

最后,merge命令接受给定的commit(您可以将其命名为origin/master),并在运行merge时将该commit及其祖先引入到您所在的任何分支。如果您愿意,可以插入--no ff或--ff以防止快进,或者仅在结果为快进时进行合并。

使用序列时:

git checkout dmgr2
git pull origin master

pull命令指示git运行gitfetch,然后执行gitmergeorigin/master的道德等效命令。因此,这几乎与手动执行这两个步骤相同,但有一些细微的差异,您可能不会太在意。(特别是pull运行的fetch步骤只会产生origin/master,它不会更新repo中的ref:1任何新提交都只会被特殊的fetch_HEAD引用引用。)

如果您使用更明确的git fetch origin(然后可选地四处查看),然后使用git merge origin/master序列,您还可以使用远程更新您自己的本地主机,在网络上只运行一次fetch:

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

例如。


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

这是我的解决方案:

git checkout mybranch
git rebase master mybranch
git add .
git rebase --continue
git commit -a -m "test"
git pull
git push

使用gitadd。以暂存文件。

下面是另一个解决方案,用于将主更改添加到分支:

git checkout mybranch
git fetch origin
git merge origin/master

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

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

通常,我更喜欢使用:

git fetch
git rebase origin/dev

如果开发是干净的,并且只想使用主或主更改进行更新

git结帐设备git拉动原点<main或master>git推送原始设备

我有主更新和我的分支更新,我希望我的分支通过重新基址来跟踪主,以正确跟踪所有历史记录。让我们把我的分支叫做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 re base--skip和git add-u解决所有冲突,直到所有问题都得到解决。

注意:在Tzachi Cohen的帮助下,对最后一个阶段进行了更正,使用“-f”强制git在服务器上“更新历史记录”。

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