1. ホーム
  2. ギット

[解決済み】ローカルとリモートのgitリポジトリを1コミットずつロールバックする。

2022-04-03 09:12:51

質問

このトピックに関する同様の投稿を読みましたが、この方法を正しく理解することができません。

不要なファイルを1000個ほどチェックインしたのですが、1by1で全部レポから削除するのは避けたいのです。

  • 私はリモートの master ブランチです。
  • 私は、ローカルにある master ブランチです。

どちらも同じリビジョンです。

リモートを1コミット分ロールバックしたいのですが。

私の履歴を masterA--B--C--D--E .

にローカルをロールバックしたい。 D .

そして、それをリモートにプッシュすると、現在のハッシュがリモートとローカルの両方でDになるようにします。

これをやるには問題があるんだ。

Git タワーを使っていますが、コマンドラインでの操作に慣れています。何かお手伝いできることはありますか?

UPDATEしてください。 以下の素晴らしいコメント。特にリポジトリが他のユーザーと共有されている場合、リセットの使用は部分的に推奨されないようです。 ハードリセットを使わずに前のコミットの変更を取り消すには、どのような方法がありますか? ? 何か方法があるのでしょうか?

解決方法は?

もしまだ誰もあなたのリモートリポをpullしていないのなら、ブランチのHEADを変更して強制的にリモートリポにpushすることができます。

git reset --hard HEAD^ 
git push -f 

(あるいは、リモートリポジトリに直接アクセスできるのであれば、その ベアリポジトリであってもHEAD参照 )

でコメントされているように エイリアンテクノロジー 下のコメント Windows (CMDセッション)では ^^ :

git reset --hard HEAD^^
git push -f 

で、?にあるように コメント によって ジョン・シュナイダー :

もし、"が付いたコマンドが HEAD^ という結果になります。 error no matches found: HEAD^ は、" を参照してください。 git show HEAD^ は動作しないようです。これは正常なのでしょうか? "

2011年以降の更新情報です。

使用方法 git push --force-with-lease ( ここで紹介するのは 2013年にGit 1.8.5で導入された)の方が安全です。

参照 シュヴァーン 's 答え を説明するためのものです。


もし誰かがすでにレポを引っ張ってきていたら?その場合、どうすればいいでしょうか?

それなら、履歴を書き換えないものを提案します。

  • git revert 最後のコミットをローカライズする (前のコミットが行ったことを取り消す新しいコミットを作成する)
  • で生成された'revert'をプッシュします。 git revert .