web-dev-qa-db-ja.com

gitでコミットを元に戻すにはどうすればよいですか?

私はgitがどのように機能するかについてあまり詳しくありません。誤ってコミットをプッシュし、元に戻したい。私はやった

git reset --hard HEAD~1

Fellow Googlersに注意してください:これはコミットを元に戻すだけでなく、すべてのファイル変更を破棄します!

そして今、プロジェクトは私のマシンで元に戻されますが、githubでは元に戻されません。このコードをプッシュしようとすると、「コミットは1コミットで「Origin/master」の背後にあり、早送りできます」というエラーが表示されます。このコミットをgithubから削除するにはどうすればよいですか?

42
David Mulder

できるよ git Push --forceしかし、あなたは履歴を書き換えていることに注意してください。レポを使用している人は誰でもこの問題を抱えています。

この問題を回避したい場合は、リセットを使用せず、代わりにgit revert

32
Let_Me_Be

この記事には、優れた説明がありますさまざまなシナリオ(プッシュORプッシュの前の単なるコミット)と同様にコミットが行われた場合):

http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html

記事から、最も簡単なコマンド私が見たコミットIDによって以前のコミットを元に戻しました、だった:

git revert dd61ab32
42
AmpT

または、git revert http://www.kernel.org/pub/software/scm/git/docs/git-revert.html を使用して試すこともできます。 git revert HEAD~1 -m 1は、最後のコミットを取り消します(まだ最後のコミットである場合)。

18
Luke

他の回答についてコメントすることはできませんが、追加情報を少し提供します。

最後のコミットをrevertしたい場合は、git revert headを使用できます。 headは、ブランチ内の最新のコミットを指します。

resetを使用するときにhead~1を使用する理由は、Gitに「後のコミットのすべての変更を削除する」(reset --hard)「前のコミット」(head~1)。

reset istoコミット、revert isonコミット。

AmpTが指摘したように、headからどれだけ離れているかをカウントするのではなく、コミットSHAを使用して識別することもできます。 SHAはログ(git log)およびその他のさまざまな方法で見つけることができます。

また、Gitの他のポインターをいつでも使用できます。例えばタグまたはブランチ。また、これらの楽しい他のすべての方法を使用してコミットを参照することもできます https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html#_specifying_revisions

7
Rodel30

復帰コミットをプッシュする必要があると思います。 githubからのpull(元に戻すコミットを含む)を再度使用し、git revertおよび結果をプッシュします。

他の人のgithubリポジトリのクローンが壊れていることを気にしない場合は、resetgit Push Origin :master

2
Ilkka