組合提交功能的最佳做法是使用功能分支:功能的所有提交都只在同一分支中。如果在沒有快速轉發的情況下合併它,則可以在提交歷史記錄中識別它們,並在合併提交中獲取最終的增量。
這樣,你會得到一個歷史是這樣的:
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個解決方案:
添加第一個倉庫作爲遠程在第二個,那麼你可以簡單地cherry-pick的提交(您可能必須解決潛在的衝突) :
# 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
0應用它們
感謝您的快速回復! –
感謝您的快速回復! 我瞭解使用非快進的部分,但我如何在提交歷史記錄中識別它們?我知道我可以在每次提交時添加註釋(git commit -m「Feature-ID-2231」)。這是你指的是什麼?對不起,我不明白兩種方式的區別。 好的,謝謝!我會看看一些git GUI,看看是否有快速的方式來列出櫻桃採摘的所有離散提交:) –
我更新了我的答案 – zigarn