6

を呼び出した後git merge --no-commit <commit>、コミットを実行すると、2 つ (またはそれ以上) の親を持つマージ コミットが行われます。代わりに単純なコミットを作成するために呼び出すコマンドは何ですか(--squashオプションを使用してマージ コマンドを再実行する必要はありません)。

4

3 に答える 3

4

git-merge man pageによると、 --squash オプションは$GIT_DIR/MERGE_HEADを記録しません。$GIT_DIR/MERGE_HEADは、マージ コミットの作成を担当します。これは、Git ソースのファイルbuiltin/commit.cで確認できます。

in_merge = file_exists(git_path("MERGE_HEAD"));
...
if (in_merge) {
... // Perform merge_commit
}

解決策: 通常のマージを実行した後、単純に$GIT_DIR/MERGE_HEADを削除して、マージ コミットを回避します。$GIT_DIR/MERGE_MSGと $GIT_DIR/MERGE_MODEを手動でクリーンアップすることも、コミットが成功したときにこのタスクを Git に任せることもできます。

于 2010-06-15T13:35:29.103 に答える
1

ディレクトリをハッキングしない最善の解決策.gitは、スタッシュとリセットを使用することです。

>git merge --no-commit $otherbranch
>git stash
>git reset HEAD
>git stash pop
>git commit -a

これがもっと頻繁に必要な場合は、自動化するのは簡単です。

これは一見、stash 部分がなくても機能するように見えますが、ファイルが追加されると失敗するため、stash を介した余分な移動を除外できないことに注意してください。

于 2012-01-13T19:51:34.213 に答える
0

を試すことができますgit merge --squash

「 git では、との違いは何ですか?merge --squashrebase」という質問を参照してください。

から:

      X                   stable
     /                   
a---b---c---d---e---f---g dev

に:

      X-------------------G stable
     /                   
a---b---c---d---e---f---g dev

マージ関係をマークせずに、宛先ブランチで押しつぶされたコミットが生成されます。

于 2010-06-14T16:34:07.340 に答える