web-dev-qa-db-ja.com

Git / Git Extensionの「squash」と「fixup」の違いは何ですか?

私はGit Extensionsをしばらく使用しています(すごい!)が、以下に対する簡単な答えは見つかりませんでした:

コミットメッセージを入力するときに、タイプミスをすることがあります。私の友人は、次の方法でそれを修正する方法を教えてくれました(Git Extentions):

コミットを右クリック>詳細設定>コミットの修正

enter image description here

次に、[修正]ボックスをオンにして、メッセージを書き直します。コミットメッセージが修正されました。

しかし、この他のオプション「Squash commit」...私はいつもそれが何をしているのだろうと思っていましたか?!

私の質問は:

Git/Git ExtentionsSquash commitFixup commitの正確な違いは何ですか?彼らはちょっと... "similar"私に: enter image description hereenter image description here

92
Placeholder

Git Extensionsがそれを具体的にどのように使用するのかわかりませんが、git rebaseには、スカッシュでコミットを自動的にスカッシュまたは修正するオプションがあります。または修正!プレフィックス、それぞれ:

   --autosquash, --no-autosquash
       When the commit log message begins with "squash! ..." (or "fixup!
       ..."), and there is a commit whose title begins with the same ...,
       automatically modify the todo list of rebase -i so that the commit
       marked for squashing comes right after the commit to be modified,
       and change the action of the moved commit from pick to squash (or
       fixup).

スカッシュとフィックスアップの違いは、リベース中にsquash操作が元のメッセージとスカッシュコミットのメッセージを結合するように要求するのに対し、fixup操作は元のメッセージを保持し、修正コミットからメッセージを破棄します。

128
drizzd

簡単に言えば、一連のコミットをリベースするときに、squashとしてマークされた各コミットは、そのメッセージをpickまたはrewordコミットメッセージの一部として使用する機会を与えます。

fixupを使用すると、そのコミットからのメッセージは破棄されます。

58
ocodo

git-rebase doc から:

2つ以上のコミットを1つにフォールドする場合は、2つ目以降のコミットのコマンド「pick」を「squash」または「fixup」に置き換えます。コミットの作成者が異なる場合、折り畳まれたコミットは最初のコミットの作成者に起因します。折り畳まれたコミットに推奨されるコミットメッセージは、最初のコミットのコミットメッセージと「squash」コマンドを使用したコミットメッセージの連結ですが、「fixup」コマンドを使用したコミットのコミットメッセージは省略します。

14
Paulo Lieuthier

私はgit拡張機能をいじくり回しましたが、多くのコミットを1つにまとめることはできませんでした。それを行うには、コマンドラインに頼らなければならず、 この投稿 役に立ちました

git rebase -i Head~2

これは対話型のリベースであり、次のことに注意してください。

  • ここで〜2は、現在のヘッドを含め、この操作に関与するコミットの数を示します
  • 後続のインタラクティブ編集ウィンドウを編集し、最初の項目を「ピック」のままにして、後続の行を「スカッシュ」に置き換える必要があります。これが不透明な場合、上記のリンクの手順ははるかに明確です。
1
BraveNewMath