2011-01-07 11 views
2

私は自宅のプロジェクトで作業し、リモートのrepoを持つ2台のコンピュータを使って作業します。私は今日家に帰ったとき別のコンピュータからgit pushを元に戻す

、私の自宅のコンピュータは2日、私の仕事用のコンピュータの後ろだったと私はリモートレポを(新しくクローニングされたコードが今壊れている)めちゃくちゃた偶然

git push origin master 

をしました。

私はthis questionから受け入れられた答えを見てきました。ここで彼は最後の良いコードを参照していました。

私の質問は、私が望む最後の良いコピーが仕事中で、自宅にいる場合、どのように変更を取り消すことができますか?最後に押された変更を元に戻すようにリモートサーバーに指示することはできませんか?

答えて

5

いいえ、元のリポジトリに、リモートでプッシュされた最後の変更を元に戻すように指示することはできません。 SSHにアクセスできますが、アクセスできる場合はgit reset --hard [revision]になります。しかし...

--forceプッシュしなかった場合、Gitはオリジンリポジトリ上のものを上書きしませんでした。実際には、あなたが押して、gitがそれを拒否しなかったならば、それはあなたが元のレポにあったものを最新であることを意味します。あなたの職場のコンピュータを起点にして、あなたの家庭のコンピュータから起源への明確な変更をプッシュし、それが受け入れられれば、それはあなたが別の支店でそれらをコミットしたと信じるようになります。

この状況から抜け出すために何をすべきかを伝えるには、分岐やその他のもので状況がどのようなものかを判断する必要があります。一度それを把握すると、元の状態に戻す(git reset --hard [revision]を使用して)ローカルリポジトリを取得することによって最後の変更を元に戻すことができます。git push --forceを実行すると、元のレポにその状態が反映されます。

オリジンリポジトリを使用している他の人がいる場合は、問題を単純に修正して上書きしないでください。これを行うには、ローカルリポジトリに必要な変更をマージしてから、新しい変更とプッシュとしてコミットする必要があります。

+0

"SSHでアクセスできれば' git reset --hard [revision] 'を実行することができます。 OPにリンクされている質問に記述されているように、ローカルブランチを '[revision]'にリセットし、 'git push -f'を実行することで同じことができます。問題はOPが '[revision]'のために何を置くべきかを知らないことです。私が誤解しない限り、これはかなり可能です。 – MatrixFrog

+0

「質問」の質問を見てください。 – coreyward

4

git reflog show origin/masterを使用すると、プッシュ前にorigin/masterの分岐先を表示できます。 git reflogコマンドから詳細(たとえば、プッシュ/フェッチの日付と時刻など)を取得する方法がありますが、その内容はわかりません。だからcat .git/logs/refs/remotes/origin/masterを実行すれば、どのコミットを元に戻そうとしているのか分かるはずです。最近の変更は一番下にあります。

関連する問題