3

私はgitにまったく慣れていないので、リポジトリにいくつかの問題やエラーが蓄積されています。今、私はそれをもう一度きれいにしたかった。

私の状況は次のとおりです。リポジトリに画像を追加しましたが、解像度が高すぎます。後でそれらをより小さなバージョンに置き換えましたが、それらは私の歴史の中にまだ残っています。そのリポジトリに取り組んだのは私だけなので、履歴の書き換えの問題は許容できます。私の問題は、写真を追加してから置き換えるまでの間に他のコミットを行ったことです。これは可能ですか?はいの場合、どのように?

私が持っているものをもう少し説明するために:

04f9ac3 replace big pictures with small pictures
503c2b6 make a useful commit
8ab463d add big picutres
3d2a5a5 initial commit

そして私が達成したいこと:

XXXXXXX combined commit of the "add big pictures" and "replace with small pictures"
503c2b6 make a useful commit
3d2a5a5 initial commit

「押しつぶす」コミットについて多くのことを見つけましたが、それを正しく理解していれば、「隣接する」コミットを組み合わせることができます。私がやりたいのは、特定のコミットを選択してそれらを結合することです。それが誰にとっても理にかなっていることを願っています。:)

4

2 に答える 2

3

を使用git rebase --interactiveしてインタラクティブなリベースを取得できます。ここで、コミットを並べ替えて押しつぶすことができます。あなたはそれを次のように呼び出すgit rebase -i 3d2a5a5でしょう、そしてあなたはおそらく次のようなものを見るでしょう

pick 8ab463d add big picutres
pick 503c2b6 make a useful commit
pick 04f9ac3 replace big pictures with small pictures

これでこのリストを編集できるようになり、次のようになります。

pick 8ab463d add big picutres
squash 04f9ac3 replace big pictures with small pictures
pick 503c2b6 make a useful commit

このファイルを保存してリベースを開始すると、「big picutres」コミットが追加され、「replace」コミットで押しつぶされ、この押しつぶされたコミットのコミットメッセージを書き換えるエディターが提供されます。そのメッセージを保存すると、その上に「有用なコミットを行う」が追加されます。

于 2013-03-13T23:17:13.400 に答える
0

あなたは押しつぶしたい、あなたは正しかった。ただし、リベースの最初のコミットを潰すことはできません。:(

$ git log
04f9ac3 replace big pictures with small pictures
503c2b6 make a useful commit
8ab463d add big picutres
3d2a5a5 initial commit

$ git rebase -i 3d2a5a5    <--- Choose a commit BEFORE the one you don't want
squash 8ab463d             <--- First commit in rebase cannot be squashed :(
pick 503c2b6
pick 04f9ac3
于 2013-03-13T23:20:40.213 に答える