2009-09-03 21:23:58 +0000 2009-09-03 21:23:58 +0000
133
133

1つのコミットをロールバックするにはどうしたらいいですか?

プッシュしていないコミットが2つあります:

$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.

最初のコミット(一番古いコミット)をロールバックして、2つ目のコミットを残すにはどうしたらいいですか?

$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...

commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

ここから: http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want

ただやるだけでいいのでしょうか?

回答 (9)

99
99
99
2009-09-03 21:32:01 +0000

最も安全でクリーンな方法は、対話的にリベースすることです。

git rebase -i HEAD^^

あるいは、

git rebase -i baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e^

そこから、1つ以上のコミットを前のコミットにまとめてつぶすことができます。 すぐにコミットしないようにするには git revert パラメータを使いましょう。

ここで作業している 2 つのコミットが同じファイルに影響する場合、マージの競合が発生する可能性があります。

リポジトリのリセットは、元に戻せないので注意してください。

54
54
54
2011-08-05 17:52:58 +0000

これは http://nakkaya.com/2009/09/24/git-delete-last-commit/ にあったもので、私の場合はうまくいきました

Git Delete Last Commit

コーヒーを飲み干した深夜に、やるべきでないことをコミットしてしまうことがあります。それから10〜15分かけて、最後にコミットしたものを削除する方法をググってみました。で、3回目以降は後で参照できるように記録を残しておきたいと思っていたのですが、

ジャンクをコミットしたがプッシュしていない場合、

git reset --hard HEAD~1 >

HEAD~1はheadの前のコミットの略語です。あるいは、リセットしたいハッシュのSHA-1を参照することもできます。

もしあなたが行った作業を消し去りたくないのであれば、--soft オプションを使えばコミットは削除されますが、変更されたファイルはすべて “Changes to be committed "のままになります。

git revert HEAD

これで新しいコミットが作成され、誤ってコミットしてしまったものをすべて取り消すことができます。

8
8
8
2009-09-03 21:26:55 +0000

git-reset –hard を実行すれば、過去に戻ることができます。あなたが探しているのは git revert で、コミットを元に戻すことができます。

6
6
6
2011-12-12 04:39:48 +0000

私は今やったばかりです:

git rebase -i HEAD^^

私はそれを台無しにしてしまったので、

git rebase --abort

その後、もう一度やってみました。その後、次のようにプッシュしました:

git push origin master -f

そして、ロールバックしたコミットよりも新しいコミットを破棄しました。これでうまくいきました。

4
4
4
2010-01-28 03:48:38 +0000

jtimbermanさんの「git reset --hardは元に戻せない」というコメントを参考にしていますが、それは全くの事実ではありません。ここを参照してください。https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1 ](https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1)

4
4
4
2009-09-03 21:46:37 +0000

いいえ、git reset --hard baf8d5e3368e1c コミットを削除し、その後 HEAD は baf8d5e になります。

3368e1c コミットを残して bad8d5e コミットを削除したい場合、最も簡単な解決策は “git rebase -i HEAD~2” (つまり、最後の 2 つのコミットの対話的なリベース) を行うことです。このコマンドを実行するとコミットメッセージエディタが起動し、直近の2つのコミットそれぞれに1行ずつ表示されます。これで、bad8d5e のコミット行を削除して保存するだけです。これで、git が履歴を書き換えて 2 回目のコミットが消えます。インタラクティブリベースは非常に強力です!

誰かが既にこれらのコミットを見ていた場合は、このようなことをしないでください (リポジトリからのプッシュやプル)。

1
1
1
2012-10-12 09:23:13 +0000
git checkout <treeish> -- /path/to/dir

これは、/path/to/dirに対して、与えられた “treeish "からディレクトリを戻します。

1
1
1
2012-02-28 20:17:27 +0000
git reset --hard {ref}

は、レポ内に他のコミットがひとつしかない場合にコミットを元に戻す唯一の方法です (例: 最初のコミットともうひとつのコミット)。残りの方法 (revert, rebase) は、少なくとも git 1.7.5.1 の時点では動作しません。

git reset を使って git gc に従った場合、git は実際には古いコミットデータをレポから完全に削除してしまいます。

0
0
0
2014-06-13 00:08:14 +0000

リポジトリフォルダ内のHEADファイルから最後のコミットのハッシュコードを手動で編集することで動作するようになりました:

"centralRepository\refs\heads\master"
"centralRepository\refs\heads\branch2"

それ以前は、ローカルで行ったUNMERGE操作をオリジンにプッシュすることができませんでした。セントラルリポジトリに「いくつかの参照をプッシュするのに失敗しました」と言い続けていました。