1. ホーム
  2. git

[解決済み] gitでコミットをつぶすとはどういう意味ですか?

2022-04-21 06:29:08

質問

gitのコミットを消すとはどういう意味ですか?Githubでコミットをつぶすにはどうしたらいいですか?

私はGitの初心者で、coala-analyzerの新人のバグに割り当てを依頼しました。バグを修正したら、今度は自分のコミットをつぶすように言われました。どうすればいいのでしょうか?

どのように解決するのですか?

Gitは、あなたの作業ディレクトリのスナップショットの高度なデータベースと考えることができます。

Gitの非常に優れた機能の一つは、コミットの履歴を書き換えることができることです。

これを行う主な理由は、そのような履歴の多くは、それを作成した開発者だけに関係するものなので、共有リポジトリに投稿する前に簡略化したり、より素晴らしいものにしたりする必要があるためです。

コミットを削除する とは、慣用的な観点から言うと、そのコミットで導入された変更をその親コミットに移動して、2つ (あるいはそれ以上) のコミットから1つにすることです。

この作業を複数回繰り返すと n を1回にコミットする。

視覚的に、コミットタグのついたところから作業を開始した場合 開始 このようになります。

新しいコミットでは、青の色合いが少し濃くなっていることにお気づきでしょうか。これは意図的なものです。

Gitではスカッシュを行うには リベース という特殊な形式の インタラクティブリベース .

一連のコミットをブランチにリベースする際の簡略化 B から始めると、それらのコミットによってもたらされたすべての変更をそのまま適用することになります。 B 元の先祖の代わりに

視覚的な手がかり

青の濃淡の違いにもご注目ください。

インタラクティブなリベースでは、コミットをどのようにリベースするかを選択することができます。 このコマンドを実行すると

 git rebase -i branch

最終的に、リベースされるコミットをリストアップしたファイルができあがります。

 pick ae3...
 pick ef6...
 pick 1e0...
 pick 341...

コミットに名前を付けませんでしたが、この4つが意図しているのは 開始 から ヘッド

このリストのいいところは 編集可能 .

コミットを省略することもできますし、また つぶす .

最初の単語を次のように変更するだけです。 スクワッシュ .

 pick ae3...
 squash ef6...
 squash 1e0...
 squash 341...

エディターを閉じて、マージの競合が見つからなかった場合、このような履歴が残ります。

あなたの場合、別のブランチにリベースするのではなく、以前のコミットにリベースしたいのでしょう。

最初の例のように履歴を変換するには、次のように実行する必要があります。

git rebase -i HEAD~4

を以下のように変更します。 スクワッシュ を最初のコミット以外のすべてのコミットに適用し、エディタを閉じます。


履歴の変更に関する注意事項

Gitでは、コミットが編集されることはありません。刈り込んだり、到達できないようにしたり、クローンしたりすることはできますが、変更することはできません。

リベースの際、実際には新しいコミットを作成していることになります。

古いものはもうどのrefからも到達できないので、履歴には表示されませんが、まだそこにあるのです!

これがリベースで実際に得られるものです。

すでにどこかにプッシュしてある場合は、履歴を書き換えることで実際にブランチが作成されます!