我的一般方法是有两个分支,upstream
并且master
. 创建您的存储库(它将在master
分支中启动您),签入您使用的上游代码的最新副本,然后upsteram
使用git branch upstream
. 此外,创建一个标签,指示您已导入哪个上游版本,例如git tag wordpress-1.0
. 我通常为此使用轻量级标签(没有任何注释的标签,基本上只是指向修订的指针)。
[wordpress-1.0] Key: [tag]
v branch
* <- upstream * commit
^- master
现在,当您仍在master
分支中时,将您的更改复制并签入。您现在有两个分支,upstream
其中包含原始上游源代码,master
其中包含您的更改,历史记录显示您对upstream
.
[wordpress-1.0]
v
* <- upstream
\
+--* <- master
master
在分支中进行所有修改。
[wordpress-1.0]
v
* <- upstream
\
+--*--*--* <- master
当上游代码的新版本出现时,检查您的upstream
分支 ( git checkout upstream
),清除.git
目录以外的所有内容,然后复制新的上游版本。用于git add -A
暂存上游版本中的所有更改、提交并标记它。
[wordpress-1.0]
| [wordpress-1.1]
v v
*--* <- upstream
\
+--*--*--* <- master
现在,签出master
并合并您的上游更改。此时,您可以选择如何合并,例如采用新的上游版本、采用您的版本或合并更改,就像您在正常合并中所做的那样。
[wordpress-1.0]
| [wordpress-1.1]
v v
*--*--------+ <- upstream
\ \
+--*--*--*--* <- master
因此,您的所有更改都发生在 上master
,并且所有上游版本都完全按原样提交到upstream
. 这将使您最容易准确地看到您的代码与上游版本的不同之处,它将有助于跟踪您已经与上游版本合并了哪些更改,等等。
[wordpress-1.0]
| [wordpress-1.1]
| | [wordpress-2.0]
v v v
*--*--------+--*-+ <- upstream
\ \ \
+--*--*--*--*----*--* <- master
希望这会有所帮助,如果您还有其他问题,请告诉我。