4

次のようなログがあります

c2ba4f3cfd3e8b29e634b41d7178ffe38f8c9f0a version 0.1 d825b48fe86107c3842f62c9e9bc5f290a2c2475 test2 0a06037c3c29a0c9446707e884d9b2777336db59 test c7453d959fc86d2868076b3900e0fd1ed63e2709 begin

すべてが既にオリジンサーバーにプッシュされていますが、コミットをマージして、これまでに作成したのはコメント付きのものだけに見えるようにしたいと考えていますversion 0.1。サーバーもプッシュ時にコミットのマージを反映する必要があります。

要するに、私が名前を付けたものの内容を含む単一のコミットをリポジトリに持たせたいのです。

私は一日中リベースを試みましたが、望ましい結果を得ることができませんでした。これどうやってするの?

4

2 に答える 2

4

必須の警告: 既にリモート リポジトリにプッシュされている履歴を変更することは、リポジトリを使用している他のユーザーにとって大きな頭痛の種になる可能性があります。

インタラクティブなリベースでそこにたどり着きます。

# start an interactive rebase onto the parent (~) of 'begin'
git rebase -i c7453d9~

インタラクティブなリベースにより、次のようなエディターが表示されます。

pick c7453d9 begin
pick 0a06037 test
pick d825b48 test2
pick c2ba4f3 version 0.1

すべてのコミットからのすべての変更を保持したいが、それらを 1 つの commit のように見せたい場合は、次のように変更します。

reword c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
fixup c2ba4f3 version 0.1

rewordコミット メッセージを変更する (「バージョン 0.1」に変更する) ように求めるプロンプトが表示fixupされ、コミットからすべてのコンテンツが前のコミットに取り込まれます。最終結果は、4 つすべてのコンテンツを含む単一のコミットになります。

同じことを達成する別の方法:

pick c7453d9 begin
fixup 0a06037 test
fixup d825b48 test2
squash c2ba4f3 version 0.1

squashコミットの内容を前のコミットにプルしますが、コミット メッセージを変更できます (この場合は「バージョン 0.1」に)。

最初の 3 つのコミットからの変更を完全に破棄し、最後の からの変更のみを保持する場合は、リベース行を次のように変更します。

pick c2ba4f3 version 0.1

基本的に、最初の 3 行を削除します。最終的な結果は、以前のコミットの内容を含まない「バージョン 0.1」のコミットになります。

履歴を変更したら、リモートへのプッシュを強制する必要があります--force

于 2012-08-23T02:21:33.960 に答える
0

間のコミットを消去できます。

git reset --mixed c7453d9
git checkout c2ba4f3cf -- .
git add -A
git commit -C c2ba4f3cf
于 2012-08-23T01:30:28.900 に答える