2011-09-28 21 views
30

私のプロジェクトでサブモジュールを使用しているため、自分自身を "ブランチなし"にしばしば見つけています。私はそこにコミットしているサブモジュールにもコードを追加しています。私がそれらのサブモジュールをプッシュしたいとき、私はもちろんブランチにいなければなりません。したがって、私の質問:Git:現在のレファレンスにブランチを設定

は、私の本当の問題は、より正確には

git checkout the_branch 
git reset --hard <previous commit-ish> 

の迂回せずに、現在のコミット/ HEADにローカルブランチを設定するにはgitの中/ショートカット(コマンドライン)方法はあります上記の "迂回路"は、私がチェックアウトコマンドで元のHEADを一時的に残しているということです。これはgit branch -fコマンドで回避できます(CharlesBのおかげで)。

答えて

39

-Bでブランチをチェックアウトします:ブランチを現在のrefであるHEADにリセットします。

git checkout -B <branch> 

docs

-Bが指定されている場合は、それが存在しない場合、作成されます。 それ以外の場合はリセットされます。これは、「gitの チェックアウトは」成功しない限り、分岐が作成/リセットされないと言うことです

$ git branch -f <branch> [<start point>] 
$ git checkout <branch> 

のトランザクションと同等です。

+3

私は本当の問題は、私が現在座っているコミットを "残しておきたい"ということではないので、 "branch -f"コマンドが私が探していることだと分かります。ありがとう。 –

+1

公式文書へのリンク:https://git-scm.com/docs/git-checkout#git-checkout-emgitcheckoutem-b-Bltnewbranchgtltstartpointgtgt –

16
git checkout -B the_branch HEAD 

これはthe_branchは前にどこか指摘していても、the_branchがでHEADコミットチェックアウトします。これは最後のいくつかのgitリリースの1つに追加されたので、それを利用できないかもしれません。別のルートは

+0

私はgitバージョン1.7.0.4を使用しています。チェックアウト-Bはまだ存在しません。しかし、それが将来になることを見てうれしいです。 –