Git策略继续将我的更改应用于其他人的updeting分支

时间:2012-02-16 15:24:57

标签: git

我认为这是一种非常常见的情况:

  • 我克隆了一个开源项目的开发分支。
  • 然后我创建了一个名为 mychanges 的分支,在那里我向项目中添加了一些代码。

现在,我希望能够更新开发分支,以便它反映最新的开发版本,但同时又能够保留我的更改。

如何实现这一目标?

我做了以下测试:

  • 上创建了notes.txt
  • 分支到 mychanges 并结帐
  • 添加了一行
  • 合并为 master
  • 删除 master
  • 上版本中的行
  • 现在 master 有一个没有添加行的版本, mychanges 分支包含它,但如果我尝试合并 mychanges master 再次git说'已经是最新'。

如果我将开发分支合并到 mychanges 一个

,也会报告冲突

谢谢!

2 个答案:

答案 0 :(得分:2)

  

现在主人有一个没有添加行的版本,mychanges分支有它,但是如果我尝试将mychanges合并到master,git说'已经是最新的'。

这是因为分支mychanges 位于后面的master分支。也就是说,master包含 mychanges 中发生的所有更改。

  

如果我将开发分支合并到mychanges

,也会报告冲突

在合并两个不同的分支时发生冲突是正常的;它只是意味着两个分支在它们中有不同的,相互冲突的变化,并且合并不能自动完成。我猜你已经编辑了development分支上的文件,如果你想保留分支开发的更改,git无法解决问题或 mychanges

  

现在我想做的就是能够更新开发分支,以便它反映最新的开发版本,但同时能够保留我的更改。

git无法自动合并时(即,无法确定要保留的文件的哪些更改以及合并中要丢弃的文件),您可以自己选择更改,然后重新合并分支机构。这使您可以选择所需的更改;如果您想要来自development分支的更改,您可以保留它们。但是,如果您更改了development上已更改的相同的代码行,则可能需要保留这些代码。

您应该阅读progit book,特别是chapter three,它将教您分支机构,并在第3-6章rebasing您的更改development来自{{{{{{{ 1}}。

该进度书是使用git的重要信息来源,它可能会回答您的一些问题。

答案 1 :(得分:0)

合并后,嗯,你合并了它。

如果您在合并后进行提交(在主服务器上),尝试再次合并将会说已经是最新的。这是合并的重点。

如果您想在合并后返回上一个州,则可以执行git reset --hard ORIG_HEAD。现在,如果您再次尝试合并,则会再次合并。

进行合并后,更改将在分支中进行,无需“继续更新”。但是如果你改变你合并的分支,以一种从你的合并中删除东西的方式,你就不能期望再次合并并把它带回来。

您可以继续使用master重新定义mychanges,以便mychanges始终基于master的HEAD,然后在需要时最终将其合并到master。