将本地git forked repo分支与远程原始更改同步

时间:2011-07-06 22:08:59

标签: git branching-and-merging remote-branch

我找到了很多q&关于将分叉的git存储库与原始远程存储库同步,但没有应用于我的确切问题。

假设我用远程名称​​上游分叉了一个项目,我的fork名称是 origin 。我在本地有 dev 分支,用于跟踪来源的 dev

只要我对我的分叉仓库没有做任何更改,我知道我可以通过

origin 的分叉仓库与上游/主机同步
git checkout master
git pull upstream master
git push origin master

到目前为止,这么好。但现在我在我的本地 dev 分支上工作,一旦完成,我想将它合并到我的本地主人。但首先,我会通过

让我的本地大师了解上游的变化
git checkout master
git pull upstream master
git push origin master

第一个问题: 它是否正确?但那么我将如何处理本地的 dev 分支?在将其更新到我的本地之前,将其重新基于我更新的,或尝试合并它而不进行重新设置?或者我是否应该尝试让我的本地 dev 始终与上游/主同步,通过不时地拉入上游/主

一旦完成,我会

git push origin master

并在本地和来源中删除我的 dev 分支。但是现在我的 master (本地和 origin )与我的本地 dev upstream / master >。

第二个问题: 现在与上游/主人保持同步的正确方法是什么?我还能干吗?

git checkout master
git pull upstream master
git push origin master

或者这里推荐的其他东西(例如某种形式的变基)?如果我再次创建一个分支 dev ,我是否会应用同样适用于第一个问题的策略,或者是否适用其他内容?

感谢您的帮助!

1 个答案:

答案 0 :(得分:5)

问题1:

我会说两种方式都没问题。根据我的经验,这样的事情通常很有效:

  • 当您从upstream / master合并到local / master时,重新定义本地/ dev。
  • 是有意义的
  • 通过在更改master时重新设置dev,可以减少在将dev合并回master时所具有的合并/ rebase的大小。
  • 只要你总是将更改从master改为dev
  • ,这就有效

使用dev完成后,您可以再次进行rebase,然后在master上进行合并,或者直接在master上进行合并。您可能希望更改合并提交中的消息以指示合并中的内容。

问题2:

从上游合并时,只要您对本地或原点没有任何不同的更改,合并就会快进。这基本上意味着git只是将来自上游的提交堆叠在你拥有的任何东西之上,并且不会有冲突或任何东西的合并。

因此,您不需要变基或任何东西。如上所述,如果你在dev上工作,那么在这一点上重新设计dev可能是一个好主意,这样你就可以更新它了。

如果您的更改与上游不同,您将进行实际合并,并且如果您愿意,可以进行变更。

重新投放或合并?

这主要取决于您和您喜欢的工作方式,但如果考虑变基,请记住它会改变历史记录。

如果其他人正在使用origin / master或origin / dev,并且您重新绑定它,那么当他们尝试合并他们的工作时,他们可能会遇到一些问题。因此,通常如果分支机构不仅仅由一个人使用,您应该使用合并。如果不止一个人使用分支,切勿使用rebase(或其他任何改变历史记录的东西)。