6

これが私がやったことです:

  • フォルダー testA を作成します。
  • 内容が「a」のファイル「a.txt」を作成します。
  • フォルダー testA への Git init
  • git add .
  • git commit -a -m "最初"
  • ファイルの「a.txt」の内容を「b」に変更します
  • git add .
  • git commit -a -m "b に変更"
  • git log (「最初」のコミット ID を取得するため)
  • git revert a90deafe08c9f8f0d7b94d3d74d40be2bd65b161

コンソールに入ります:

error: could not revert a90deaf... first
hint: after resolving the conflicts, mark the
hint: with 'git add <paths>' or 'git rm <paths
hint: and commit the result with 'git commit'

さて、すべてのファイルを前回のコミットの状態にしたいのですが、どうすればよいでしょうか?

更新 私が欲しいもの:

  • 「b に変更」コミットを保持し、「最初の」コミットとまったく同じ 3 番目のコミットを行いたいと考えています。ファイルを失いたくありません。
  • バイナリ ファイルを操作するには (次のポイントを参照)
  • バイナリ ファイルがコミットされた状態である限り、どのように管理されているかは気にしないので、この場合はマージは必要ありません。もっと簡単にしたいだけです。ファイル A をコミット X からコミット Y に置き換えます。マージの複雑さは必要ありません。
4

1 に答える 1

16

まず、次の方法で良好な状態に戻します。

git revert --abort

次に、あなたが求めているものを見てください。 git revert元に戻したいコミットのコミット ID を取ります。最初のコミット セットは次のようa.txtになります。

a

2番目のコミットにより、次のようになります。

b

そして、最初のコミットを元に戻したいとします。aつまり、行の追加と競合しているファイルの追加を削除したいということです。最初のコミットでファイルが追加され、2 番目のコミットでファイルが変更されました。そのため、git は削除を求められた今、何をすべきかわかりません。

a.txt「前のコミットの状態のすべてのファイル」によって、その中にある状態に戻したいと思いますa

以前の状態に戻す方法はいくつかあります。コミットが共有されていない場合は、次を使用できますgit reset

git reset --hard HEAD~1

これは、「作業コピーとインデックスの状態を以前のコミットにリセットする」ことを意味します。この時点で、その中a.txtaあります。

2 番目のコミットを共有していた場合は、履歴を書き換えることになり、他の多くの問題を引き起こすため、上記を実行したくありません。代わりに、上記でやろうとしていたようにコミットを元に戻しますが、正しいコミットを使用してください。この場合、元に戻したいのは HEAD コミットです。

git revert HEAD

コミットを元に戻すと競合する場合があります。その場合、マージの競合と非常によく似ています。それらを処理し、競合を修正しgit add、 を使用して変更を加えたファイルをステージングするか、 を使用しgit rmてファイルを削除する必要があります。完了したらgit revert --continue、プロセスを終了させます。

アップデート

派手なマージを行うことなく、以前の状態を復元する最も簡単な方法は、 を使用することgit checkoutです。できるよ:

git checkout HEAD~1 -- a.txt
git commit -m "Reverted to the previous version."

マージも大騒ぎもありません。:-) HEAD~1もちろん、どんなコミットでもかまいません。あなたが持っていた例に基づいてこれを使用しました。

于 2012-10-22T09:37:33.187 に答える