122

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'
4

4 に答える 4

179

インタラクティブなリベースgit rebase -iを実行したい。

現在「コミット1」を使用ていて、マージするコミット「コミット2」が前のコミットである場合は、を実行できますgit rebase -i HEAD~2。これにより、リベースが通過するすべてのコミットを一覧表示するエディターが生成されます。「pick」で始まる2行が表示されます。スカッシュを続行するには、2行目の最初の単語を「pick」から「squash」に変更します。次に、ファイルを保存して終了します。Gitは、最初のコミットを最後から2番目のコミットに押しつぶします。

このプロセスにより、ブランチの履歴が書き換えられることに注意してください。あなたがどこかにあなたのコードをプッシュしているなら、あなたはそうしなければならず、git push -fあなたのコードを共有している人はあなたの変更を引き出すためにいくつかのフープを飛び越えなければならないでしょう。

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

于 2012-09-21T02:19:24.433 に答える
90

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

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

これを回します

pick YourCommitMessageWhatever
pick YouGetThePoint
pick IdkManItsACommitMessage

これに

pick YourCommitMessageWhatever
s YouGetThePoint
s IdkManItsACommitMessage

ヒットした場所でアクションを実行してescenter変更を保存します。[1]

次の画面が表示されたら、それらのガベージ#行[2]を取り除き、新しいコミットメッセージなどを作成して、同じescape enterアクションを実行します。[1]

うわー、コミットが少なくなります。またはあなたはただすべてを壊しました。


[1]-またはgit構成で機能するものなら何でも。これは、私の設定では効率的なシーケンスです。

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

于 2017-03-16T20:24:16.253 に答える
26
  1. ブランチをチェックアウトし、すべてのコミットの数を数えます。
  2. git bashを開き、次のように記述します:git rebase -i HEAD~<quantity of your commits>(ie git rebase -i HEAD~5
  3. 開いたtxtファイルで、最初のコミット(一番上にある)を除くすべてのコミットに対してpickキーワードをに変更します。squash一番上のものをに変更しreword(つまり、次のステップでこのコミットに新しいコメントを提供します)、[保存]をクリックします。vimの場合は、を押してからEnterキーを押しescて保存し、wq!Enterキーを押します。
  4. コメントを提供します。
  5. Gitを開き、[すべてフェッチ]を実行して、新しい変更を確認します。

終わり

于 2015-08-03T09:45:23.347 に答える
0

これが私がすることです。インタラクティブなリベースを行うよりも(私にとって)簡単です:

git reset HEAD~2.  // go back 2 commits.
git commit -am “My squashed single commit”
git push --force 
于 2022-02-18T20:13:58.210 に答える