使分叉项目与上游项目保持同步的最佳 git 工作流程是什么?
What is best git workflow to keep a forked project uptodate with upstream project?
我正在维护另一个自由软件项目的分支版本。它提供了一些目前无法与上游合并的额外功能。我想保持这个分支,与上游项目的最新更新保持同步。
我就是这样做的:
- 有另一个分支像 'my-custom-version'
- 我保持本地
master
,与上游同步 master
- 我使用
git rebase
在上游项目的每个新版本上使用 master 重新设置我的自定义分支
- 由于我的分支和master之间有一些冲突(比如
package.json
文件中的版本和描述,我得到了合并冲突。我解决了冲突并使用git rebase --continue
。
在这里,我认为我的历史被破坏了,因为合并恰好替换或修改了最后一次提交。这让我很担心我的做法对不对。
我应该用 master 重新设置我的自定义分支(就像自定义分支的 master)吗?如果是这样,我应该如何改变以保证历史安全。如果不是,正确的方法是什么?
根据定义,变基重写历史。没有简单的方法可以确保它的安全,而且重写公开可见的历史确实很危险。
我想说最简洁的方法就是定期从 master 合并到您的分支。
git checkout custom-branch
git merge master
Git 图形将如下所示(A - 公共基础,B - 你自己想要保留的更改,A1..A4 - master 中正在进行的开发,M1,M2 - 你的合并) :
A -> A1 -> A2 -> A3 -> A4 (master)
| | |
+-> B -----> M1 ------> M2 (custom branch)
我正在维护另一个自由软件项目的分支版本。它提供了一些目前无法与上游合并的额外功能。我想保持这个分支,与上游项目的最新更新保持同步。
我就是这样做的:
- 有另一个分支像 'my-custom-version'
- 我保持本地
master
,与上游同步master
- 我使用
git rebase
在上游项目的每个新版本上使用 master 重新设置我的自定义分支 - 由于我的分支和master之间有一些冲突(比如
package.json
文件中的版本和描述,我得到了合并冲突。我解决了冲突并使用git rebase --continue
。
在这里,我认为我的历史被破坏了,因为合并恰好替换或修改了最后一次提交。这让我很担心我的做法对不对。
我应该用 master 重新设置我的自定义分支(就像自定义分支的 master)吗?如果是这样,我应该如何改变以保证历史安全。如果不是,正确的方法是什么?
根据定义,变基重写历史。没有简单的方法可以确保它的安全,而且重写公开可见的历史确实很危险。
我想说最简洁的方法就是定期从 master 合并到您的分支。
git checkout custom-branch
git merge master
Git 图形将如下所示(A - 公共基础,B - 你自己想要保留的更改,A1..A4 - master 中正在进行的开发,M1,M2 - 你的合并) :
A -> A1 -> A2 -> A3 -> A4 (master)
| | |
+-> B -----> M1 ------> M2 (custom branch)