を呼び出した後git merge --no-commit <commit>
、コミットを実行すると、2 つ (またはそれ以上) の親を持つマージ コミットが行われます。代わりに単純なコミットを作成するために呼び出すコマンドは何ですか(--squash
オプションを使用してマージ コマンドを再実行する必要はありません)。
3 に答える
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 に任せることもできます。
ディレクトリをハッキングしない最善の解決策.git
は、スタッシュとリセットを使用することです。
>git merge --no-commit $otherbranch
>git stash
>git reset HEAD
>git stash pop
>git commit -a
これがもっと頻繁に必要な場合は、自動化するのは簡単です。
これは一見、stash 部分がなくても機能するように見えますが、ファイルが追加されると失敗するため、stash を介した余分な移動を除外できないことに注意してください。
を試すことができますgit merge --squash
。
「 git では、との違いは何ですか?merge --squash
rebase
」という質問を参照してください。
から:
X stable
/
a---b---c---d---e---f---g dev
に:
X-------------------G stable
/
a---b---c---d---e---f---g dev
マージ関係をマークせずに、宛先ブランチで押しつぶされたコミットが生成されます。