17

私はしばらくの間実行されていた git プロジェクトを持っていますが、今は古い歴史を捨てたいと思っています。たとえば、最初から 2 年前までです。捨てるとは、この時間内の多くのコミットを、同じことを行う 1 つのコミットに置き換えることを意味します。

チェックgit rebase -iしましたが、git からのすべてのコミットを含む他の (完全な) 履歴は削除されません。

ここにグラフィカルな表現があります (d は変更セットです):

(base) -> d1 -> d2 -> d3 -> (HEAD)

私が欲しいのは:

(base) -> d1,d2 -> d3 -> (HEAD)

これはどのように行うことができますか?ありがとう。

編集

私はそれで動作しました

git rebase -i cd1e8c9

cd1e8c9 がスカッシュの開始リビジョン (ベース) です。次に、fixup を使用してリビジョンを融合させました。ありがとう。

4

4 に答える 4

26

履歴全体をあまり気にしない場合、これを行う別の簡単な方法は、現在のブランチを取得し、これに基づいて孤立したブランチを作成することです。次に、すべてのファイルをこのブランチに追加し、最初のコミットを 1 つ行います (すべての履歴が失われます)。その後、これをリモート リポジトリにプッシュできます。

フラット化したいブランチにいると仮定します。まず、クリーンかどうかを確認します。

git status -s

上記のコマンドは何も出力しないはずです。

孤立したブランチを作成します。

git checkout --orphan flattened

すべてのファイルを追加

git add .

単一のコミットを作成する

git commit -m "Initial flattened commit"

すべてが希望どおりかどうかを確認し、リモートにプッシュします (例):

git status -s

# (original_branch being the branch with the full history)
git diff original_branch..flattened  

# (assuming your remote is origin and the branch to overide is master) 
# Think twice before doing this!
git push origin +flattened:master 
于 2013-01-09T11:45:39.757 に答える
5

私はリベースを行うことにあまり慣れていないので、別のクローンでこれを試して、実際の作業スペースで行う前に機能するかどうかを確認してください。

ここに私のコミットがあります

noufal@sanitarium% git log --pretty=oneline
967122e7d4e687c0707d25c62cb0d3b6a45d337f Added h
3b82cae737d5fb3317bc7a686a2fdf0fdd9d1c7e Added g
94d89e0455b12e1e4843e64a8f62f3ad6cdf42f3 Added f
a30321b7a367d9b7da6369783650acadbb773cfb Added e
04453f1c90ffde0574c9c8a76f154d741d7d83f4 Added d
ec723a3266e56cc39967bf117154465575905e31 Added c
f415d1f58e2f7bd4beea80ab9acd8309bf5b64e7 Added b
7f1f8d1f903168aa929818a0eb81e0ec7743fb85 Added a
21790602bd6c0a009899ea33e64fec63559c0a76 Added it

私は(最初のコミット)にリベースしてそれらすべてを押しつぶしています。このコマンドでそれを行い04453f1c90ffde0574c9c8a76f154d741d7d83f4 (Added d)ます21790602bd6c0a009899ea33e64fec63559c0a76

git rebase 04453f1c90ffde0574c9c8a76f154d741d7d83f4 --onto 21790602bd6c0a009899ea33e64fec63559c0a76

これを終了すると、ログは次のようになります

noufal@sanitarium% git log --pretty=oneline
c76290666c8b868d36290d8f5276b879bb78d05d Added h
7001ce74f0837b35c0b82abbb82ad8f40801449c Added g
051062042e56759d83258c5e90a9876aa6f52764 Added f
fb1a62b0c0faefa0110ef7b8eee01a13f2f62034 Added e
21790602bd6c0a009899ea33e64fec63559c0a76 Added it

これはあなたが探しているものですか?

于 2010-12-22T06:51:50.650 に答える
4

squashを使用して、それぞれのコミットを 1 つにコミットしgit rebase --interactiveます。

于 2010-12-22T07:55:09.603 に答える