17

git pull --rebaseプッシュされていないマージコミットを削除します。それらを保存させる方法はありますか?

私の歴史は次のようになっていると言ってください— </ p>

A
| \ 
B  H
|  |
C  G
|  |
D  F
| /
E

Aマージコミットです。)

後はgit pull --rebase— </ p>

H
|
G
|
F
|
X
|
B
|
C
|
D
|
E

(私の履歴に挿入されXた新しいコミットです。)—<code>Aは削除されます。git pull --rebase

git rebase --preserve-mergesで保存するために使用できることは知っていますがgit rebase、で保存する方法がわかりませんgit pull --rebase

4

4 に答える 4

34

更新:「Gitの「rebase --preserve-merges」は正確に何をするのか(そしてその理由は?)」で示したように、Git 2.18(2018年第2四半期)以降、従来のオプションよりも新しいオプションを選択することをお勧めします--rebase-merges--preserve-merge

それ以来:

それで:

git rebase --interactive --rebase-merges origin/master 
# or
git config pull.rebase merges
git rebase --interactive origin/master (would use rebase-merges)

2013年の元の回答:

または(今後のgit 1.8.5 Q4 2013の場合、現在git 1.8.5、2013-11-27で提供されています):

" git pull --rebase"は常に沼地の標準的な平坦化リベースを行うことを選択しました。「 」設定を「」に設定することで、「」
を実行するように指示できます。rebase --preserve-mergespull.rebasepreserve

pull --rebaseしたがって、マージを確実に保持するには、単純な構成で十分です。

git config pull.rebase preserve

詳細については、 commit 66713ef3を参照してください( Stephen Habermanに感謝します)。

プル:リベース時にプルがマージを保持できるようにします

ユーザーがマスターで作業していて、機能ブランチにマージしたが、git pullマスターが移動したために「」pull.rebaseする必要がある場合、機能ブランチはマスターにフラット化されます。

これは、 " git pull"が現在、リベースのマージの保持フラグを認識していないためです。これにより、機能ブランチのマージコミットのみが新しいマスターに再生され、機能ブランチの個々のコミットは再生されないため、この動作が回避されます。

リベース--rebase=preserveに渡されるオプションを追加します。--preserve-merges

また、構成設定preserveで許可される値に''を追加します。pull.rebase

于 2013-09-12T05:35:39.743 に答える
18

あなたはとに分割することがpullできfetchますrebase

git fetch origin master
git rebase origin master --preserve-merges
于 2012-08-08T11:48:07.410 に答える
9

単に:

git pull --rebase=preserve

ドキュメントから:

保存するように設定すると、ローカルで作成されたマージコミットがフラット化されないように、--preserve-merges渡されたオプションを使用してリベースします。git rebase

于 2016-07-27T17:10:23.910 に答える
0

git v2.22.0以降、--preserve-mergesオプションは非推奨になり、 (オプション--rebase-mergesと組み合わせて使用​​される)別のベースチップの上にコミットを再適用するようになりました。--interactivegit-rebase

git fetch origin master
git rebase --interactive --rebase-merges origin/master 
于 2021-04-12T14:45:57.223 に答える