我对 Git 很陌生,所以任何过于详细的解释都值得赞赏:(
比如说,我有一个在两个国家/地区发布的游戏应用程序。实际上,我为此应用程序有两个代码存储库,它们具有相同的体系结构,但在实现级别上或多或少不同。现在我们有时希望两个存储库交换代码,例如将功能的代码移动到另一个存储库,我有两个问题:
- 对功能的所有提交进行分组的最佳实践是什么(我们在 Atlassian Jira 上管理任务,假设我们始终可以在那里正确标记功能的所有任务(?我正在考虑标记提交并按 Jira 问题 ID 过滤它们,但具体如何?
- 一旦我得到了我需要的所有提交列表,我如何将它们应用于另一个存储库,如果它们有很多并且它们是离散的提交。
谢谢!
对功能提交进行分组的最佳实践是简单地使用功能分支:功能的所有提交都位于同一分支中。当您在不快进的情况下合并它时,您可以在提交历史记录中识别它们,并在合并提交中获取最终增量。
这样,您将获得这样的历史记录:
3 next commit
2 merge of feature #1
|
| C last commit of feature #1
| B 2nd commit of feature #1
| A 1st commit of feature #1
|/
1 commit before starting feature branch
您可以通过以下方式标识功能 #1 的提交:
# Get all the commits in second parent of merge that are not in first parent of merge
git log 2^2...2^1
# To get only the commit hash (to use as parameter for cherry-pick):
git rev-list 2^2...2^1
另一种方法是在提交消息中使用唯一标识符(例如票证引用(标记它们,然后您可以使用git log
的过滤器列出它们:
git log --grep 'feature #1'
# To get only commit hash:
git log --format='%H' --grep 'feature #1'
要将提交从一个存储库应用到另一个存储库,您至少有以下 2 个解决方案:
将第一个存储库添加为第二个存储库中的远程存储库,然后您可以简单地挑选提交(您可能需要修复潜在的冲突(:
# In second repository git remote add other_country ULR_TO_FIRST_REPO git fetch other_country # Go on the right branch git cherry-pick COMMIT1 COMMIT2 COMMIT3... # If you have conflict: solve them (like for a merge) and then `git cherry-pick --continue`
在第一个存储库中,导出带有
,并git format-patch
的提交(如果它们不在同一范围内,则多次导出(,并在第二个存储库中应用它们git am