446

私のローカル リポジトリには、テーマ的に類似したコミットがたくさんあります。リモートにプッシュする前に、それらを単一のコミットに結合したいと思います。どうすればいいのですか?私rebaseはこれを行うと思いますが、ドキュメントを理解できません。

4

8 に答える 8

698

あなたがやりたいことは、gitでは「スカッシュ」と呼ばれています。これを行う場合、多くのオプションがあります (多すぎますか?) が、プッシュされていないすべてのコミットを 1 つのコミットにマージするだけの場合は、次のようにします。

git rebase -i origin/master

これにより、テキスト エディター ( -i「インタラクティブ」用) が次のようなファイルで表示されます。

pick 16b5fcc Code in, tests not passing
pick c964dea Getting closer
pick 06cf8ee Something changed
pick 396b4a3 Tests pass
pick 9be7fdb Better comments
pick 7dba9cb All done

最初のものを除くすべてpicksquash(または) に変更します。s

pick 16b5fcc Code in, tests not passing
squash c964dea Getting closer
squash 06cf8ee Something changed
squash 396b4a3 Tests pass
squash 9be7fdb Better comments
squash 7dba9cb All done

ファイルを保存してエディターを終了します。次に、別のテキスト エディターが開き、すべてのコミットからのコミット メッセージを 1 つの大きなコミット メッセージに結合できます。

出来上がり!「git squashing」をグーグルで検索すると、利用可能な他のすべてのオプションの説明が表示されます。

于 2011-08-04T00:27:40.940 に答える
44

ここにはかなりの数の実用的な答えがありますが、これが最も簡単であることがわかりました。このコマンドはエディターを開きます。ここで、それらを削除/マージして1つにpick置き換えることができますsquash

git rebase -i HEAD~4

ここで、41 つに押しつぶしたいコミットの数です。こちらでも説明されています。

于 2016-10-05T23:16:09.863 に答える
31

git rebase -i「ルート」として使用するリビジョンを渡して、これを行うことができます。

git rebase -i origin/master

での最後のコミット以降に行ったすべてのコミットを表示するエディタ ウィンドウが開きますorigin/master。コミットを拒否したり、コミットを 1 つのコミットにまとめたり、以前のコミットを編集したりできます。

おそらくこれをより適切に説明できるリソースがいくつかあり、他の例を示しています。

http://book.git-scm.com/4_interactive_rebaseing.html

http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

私が見つけた最初の 2 つの良いページです。

于 2011-08-04T00:08:57.870 に答える
8

Interactive Rebaseを使用してコミットをスカッシュ (結合) できます。コマンドラインまたはSmartGitでこれを行う方法を示す非常に優れた YouTube ビデオがあります。

すでに SmartGit ユーザーである場合は、(Ctrl キーを押しながら) すべての発信コミットを選択し、コンテキスト メニュー (右クリック) を開いてコミットをスカッシュできます。

とても快適です:

ここに画像の説明を入力

Atlassianの非常に優れたチュートリアルもあり、それがどのように機能するかを示しています。

于 2015-11-10T17:01:07.627 に答える
7

そして、私のsquashing複数の方法pushは(おそらく、自分のブランチに多くのコミットをプッシュし、プルリクエストを実行したいが、すでにプッシュした多くのコミットでそれらを混乱させたくない)です。私がそれを行う方法(私が知る限り、他のより簡単なオプションはありません)。

  1. squash(プルリクエスト先の元のブランチからのブランチ)のために新しいブランチを作成します。
  2. 新しく作成したブランチをプッシュします。
  3. コミット (すでにプッシュ済み) を含むブランチを新しいブランチにマージします。
  4. 新しいブランチとスカッシュをリベースします。
  5. 新しいブランチをプッシュします。
  6. 単一のコミットを持つ新しいブランチの新しいプル リクエストを作成します。

例:

git checkout from_branch_you_wish_to_pull_request_to
git checkout -b new_branch_will_have_single_squashed_commit
git push -u new_branch_will_have_single_squashed_commit
git merge older_branch_with_all_those_multiple_commits
git rebase -i (here you squash)
git push origin new_branch_will_have_single_squashed_commit

リクエストをプルできるようになりましたfrom_branch_you_wish_to_pull_request_to

于 2015-11-15T11:20:49.107 に答える
2

そのリンクで詳しく説明されているInteractive Rebasingを使用することをお勧めします。

「git rebase interactive」を検索すると、他の優れたリソースを見つけることができます。

于 2011-08-04T00:06:39.490 に答える