2012-03-12 11 views
3

私はちょうど何かダムをやった。私fooclientプロジェクトでは、私はちょうどでした:つまり無関係のプロジェクトからgit pullを元に戻すには?

git remote add official https://github.com/fooserver 
git pull official master 

を、私は私の作業ディレクトリに(代わりに、クライアントのサーバー、)完全に異なるコードベースを引っ張りました。驚くことではないが、マージの競合はあまりありません(ファイル名はまったく別のものです)。驚くことではないが、Gitは、レポに共通の祖先がひとつもいないことを私に警告することは全くできなかった。この特定の状況では

、私はこれを行うことによって回復することができるよ:

cp file-i-worked-on.js ~ 
git reset --hard HEAD # to discard broken merge conflicts 
git checkout a12345 # where a12345 is the latest head of fooclient that I had checked out 
cp ~/file-i-worked-on.js . 

しかし、何がより一般的な戦略でしょうか?

答えて

4

これが最後の状態のマスターにあなたをリセットするにはしていました。 git reflogを実行すると、reflogが表示され、正しい状態にリセットされていることを確認できます。

git fetch 

これからは

+0

ああ - これは正解のように聞こえます。だからHEAD @ {...}では、HEADが指しているものの変更を追跡することができます。そして、あなたのコマンドは、「あなたが頭を悩ます直前に何を指していたのか知​​っていますか?そこに戻ってみましょう...」 - 非常に便利なツールのように聞こえます。 –

+0

@SteveBennettはい!それはあなたがしたことを逆追跡しようとするよりも偶発的なコマンドを元に戻すほうがはるかに簡単なので非常に便利です。残念ながらそれはGitのよく知られている機能ではありません。 –

0

不要なリモート(git remote rm ...)を削除した後、現在のブランチをオンにしたい場所にちょうどgit reset --hardを置きます。

git reset --hard origin/master 

あなたが前masterにあった場合、これはあなたがあなたのmaster原点リモートのマスターがそれであることを同じ場所であることをリセットします。それでおしまい!これが原因reflog可能である

git reset --hard [email protected]{1} 

+0

これは、未処理のローカルコミットがないことを前提としています。 –

0
git stash 
git reset --hard HEAD^ 
git stash apply 
+0

ハッシュマージされたファイルを隠すこともありませんか? –

+0

@SteveBennett:うんうん、私はまだそこにbeeingマージ競合についての部分を読んでいない。 – wintersolutions

0

あなたはgitkやgitのログや他の何かで得たものを検査します。今すぐあなたが持っているものをマージまたはリベースして、どこに行きたいかを決めます。

+2

あなたはgit pullを使用しないと言っていますか? –

+0

修正します。以前はよく__していた。私はもういない。 –

関連する問題