1

私は現在の状況を持っています

A ----- D
 \
  B - C (master)

ここで、マージせずDにコミットを挿入したいと思います。たとえば、将来のコミットとの内容を変更しないでください。BC

基本的に、コミットの親を書き換えますB(したがって、他のすべてのコミットはアップストリームになります)。

結局、私は手動の相互作用なしで持っていたいです:

A - D - B - C
4

3 に答える 3

1

バッチモードは、現在のブランチ履歴にあるものに対して実行されます。この場合、あなたはDの歴史かあなたの主人の歴史のどちらかを見ています。ここで行う最も簡単なことは次のとおりです。

git rebase D

(マスターがすでにチェックアウトされていると仮定します)なぜこれをバッチモードで実行する必要があるのですか?

于 2012-06-27T00:13:09.497 に答える
1

探しているアクションはrebaseインタラクティブモードです。

git checkout C
git cherry-pick D # Now: A - B - C -D
git rebase -i A
<reorder commits>
git log

この--interactive / -iオプションを使用すると、エディターで履歴が開き、好きなだけ物事を混乱させることができます。複数のコミットをまとめて潰したり、一部を完全に削除したりすることもできます。

完全に平凡になりたい場合は、次のようにすることもできます。

git checkout A
git cherry-pick D B C
于 2012-06-26T23:55:02.617 に答える
1

内容を変更せずに(もちろんコミットSHAのほかに)履歴に新しいコミットを導入する適切な方法は、中間のgitグラフトを使用することです。

次の例では、以前の移植はなかったと思います。

# use a graft to temporarily change the parent of B to be D
echo "$SHA_B $SHA_D" > .git/info/grafts
# apply the grafts, changing the SHAs of the commits B...C
git filter-branch
# remove old pending commits
git gc
# remove the no longer needed grafts
rm .git/info/grafts

これにより、すべてのコミットコンテンツ(ファイルとフォルダー)は変更されません。

于 2013-04-27T18:20:26.380 に答える