web-dev-qa-db-ja.com

2つのコミットを1つのコミットに結合するにはどうすればよいですか?

2つのコミットを持つブランチ 'firstproject'があります。これらのコミットを取り除き、単一のコミットとして表示するようにします。

コマンドgit merge --squashは有望に聞こえますが、git merge --squashを実行すると、コマンドのオプションが表示されます。正しいコマンドは何ですか?

Commit 1:
Added 'homepage.html'
Added 'contacts.html'

Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'
66
Don P

git rebase -iを使用して、 インタラクティブなリベース を実行します。

現在onで、「commit 1」であり、マージするコミット「commit 2」が前のコミットである場合、次のことができます。 git rebase -i HEAD~2を実行し、2行目の最初の単語を「pick」から「squash」に変更します。次に、ファイルを作成して終了します。 Gitは最初のコミットを最後の2番目のコミットに押しつぶします。

このプロセスはブランチの履歴を書き換えることに注意してください。コードをどこかにプッシュする場合、git Push -fを使用する必要があり、コードを共有しているユーザーは変更をプルするためにいくつかのフープをジャンプする必要があります。

問題の2つのコミットがブランチの最後の2つのコミットではない場合、プロセスはわずかに異なることに注意してください。

109
meagar

私のような物忘れのための怠zyなシンプルなバージョン:

git rebase -i HEAD~3または3ではなく多くのコミット。

これを回す

pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage

これに

pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage

escを押してからenterを押すアクションを実行して、変更を保存します。 [1]

次の画面が表示されたら、これらの不要な行#[2]を取り除き、新しいコミットメッセージまたは何かを作成し、同じescapeenterアクションを実行します。 [1]

うわー、あなたはより少ないコミットを持っています。または、すべてを壊しました。


[1]-またはgit設定で機能するもの。これは、私の設定を考えると効率的なシーケンスです。

[2]-# this is your n'th commitのようなものが数回表示され、元のコミットがこれらのメッセージのすぐ下に表示されます。これらの行を削除し、1に結合するn個のコミットの意図を反映するコミットメッセージを作成します。

46
Stachu
  1. ブランチをチェックアウトし、すべてのコミットの数をカウントします。
  2. Git bashを開き、次のように記述します:git rebase -i HEAD~<quantity of your commits>(i.e. git rebase -i HEAD~5
  3. 開いたtxtファイルで、最初のコミット(一番上)を除くすべてのコミットでpickキーワードをsquashに変更します。一番上でrewordに変更し(次のステップでこのコミットに新しいコメントを提供することを意味します)、[保存]をクリックします! vimの場合、escを押し、wq!を入力して保存し、Enterを押します。
  4. コメントを提供します。
  5. Gitを開き、「すべて取得」を行って新しい変更を確認します。

完了

13
user5820972