web-dev-qa-db-ja.com

失われたHEADブランチをgitで取得する

私は、Masterブランチだけを持ち、オリジンがない、非常にシンプルなGitプロジェクトを持っています。

線のどこかで、誤ってデタッチドHEADをプロジェクトに作成しました。次に、そのデタッチされたHEADに一連のコミットを行った後、それをMasterブランチにマージしようとしました。これを行っていましたSourceTreeでは、最初はマージが機能しているように見えました(グラフはマスターが頭に入るのを示し、修正したマージの競合がありました)が、次にMasterをダブルクリックしてそのブランチに切り替えた後、突然HEADが消えました。すべてのブランチの下のSourceTreeのどこにも見つけることができず、git branchおよびgit logコマンドラインでは、Masterブランチも表示されます。

失われたデタッチされたHEADからコミットを取り戻す方法はありますか?

29
sanjaypoyzer

SourceTreeのどこにも見つかりません

コマンドラインインターフェイスに戻り、 git reflog を実行します。
HEAD)のSHA1をログで見つけることができるはずです。

デタッチされたHEADブランチをマスターに「マージ」する必要がないことに注意してください。

あなたは単にあなたの現在の切り離されたマスターをマスターにリセットしたかもしれませんHEAD commit。
Git分離ヘッドを修正する方法 」を参照

git checkout master

純粋なSourceTreeの方法で( このスレッドのように

http://edwon.tv/wordpress/wp-content/uploads/2012/09/Screen-Shot-2012-10-15-at-4.15.22-PM.png

また、既存のブランチをチェックアウトし、最新のコミットを右クリックして、このコミットに対してReset <branch>を選択して、ブランチポインターを目的の場所に移動することもできます。

HEADが表示されている場合、デタッチされたHEAD上にいることを意味します。つまり、ブランチがチェックアウトされておらず、コミットされてもブランチは移動されません。 SourceTreeでデタッチされたHEADをチェックアウトすると、かなりはっきりと警告が表示されます。そのため、これは事前にコマンドラインで行われ、SourceTreeでAfter Effectsを確認しました。

代替:

新しいブランチコマンドを使用して、「HEAD」ブランチ(実際にはまったくブランチではない)からブランチを作成します。その時点で頭はなくなりました。
その後、そのブランチをマスターとマージし、HEADから作成した不要なブランチを削除することができました。

39
VonC

これが私のために働いたものです:

  1. 使用する git reflogコマンドを使用して、消えたヘッドバージョンを見つけます。
  2. 使用する git checkout @{-1}移動するHEAD消えたものに戻ります。番号-Xは、現在のヘッドから消えたコミットの数です。 -1は、消えたバージョンが1現在のHEADからコミットします。
  3. 消えたバージョンを保存するブランチを作成します
42
us_david