917

特定のコミットを元に戻す最も簡単な方法は次のとおりです。

  • 頭の中や頭の中ではない
  • リモートにプッシュされました。

最新のコミットでない場合は、

git reset HEAD

動作しません。そして、それはリモートにプッシュされているので、

git rebase -i

git rebase --onto

リモートで問題が発生します。

もっとそう、私は本当に歴史を変更したくありません。悪いコードがあった場合、それは履歴にあり、見ることができます。私はそれを作業コピーに入れたいだけで、逆マージコミットを気にしません。

言い換えると、Gitは次のsvnコマンドに相当します。

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

これは、新しいコミットとして、これらのリビジョンのすべての変更を逆マージすることにより、295から302へのすべての変更を削除します。

svn merge -c -302 ^/trunk

もちろん、302コミットを元に戻すには、それぞれのコミットからの変更を逆マージする別のコミットを追加します。

Gitでの操作はかなり単純で、かなり一般的なユースケースである必要があると思いました。アトミックコミットのポイントは他に何ですか?

ステージングスタッシングがあり、コミットが完全にアトミックであることを確認するために、これらのアトミックコミットの1つ以上を簡単に元に戻すことができませんか?

4

4 に答える 4

1409

を使用してコミットのハッシュを識別し、git logを使用git revert <commit>して、これらの変更を削除する新しいコミットを作成します。ある意味でgit revertは、その逆ですgit cherry-pick。後者は、パッチが欠落しているブランチにパッチを適用し、前者は、パッチを保持しているブランチからパッチを削除します。

于 2010-02-23T14:31:16.063 に答える
433

私は自動コミットが好きではないgit revertので、これは役に立つかもしれません。

auto-commit ではなく、変更されたファイルだけが必要な場合は、使用できます--no-commit

% git revert --no-commit <commit hash>

これはと同じです-n

% git revert -n <commit hash>
于 2013-05-16T22:50:43.043 に答える
45

すでにプッシュされているため、履歴を直接操作しないでください。git revertコミット履歴を操作しないように、新しいコミットを使用してコミットから特定の変更を元に戻します。

于 2010-02-23T14:28:46.613 に答える