git:ヘッドを切り離さずにブランチを切り替える


101

メインブランチ(マスター)と実験的な作業のためのブランチを備えたgithubにリポジトリがあります。私はいくつかのコミットを行い、実験ブランチにプッシュし、すべてが順調でした。

今、別のマシンで、リポジトリ(git clone repository)のクローンを作成し、実験的なブランチ(git checkout branchname)に切り替えようとしますが、これを行うたびに、頭が切り離され、変更をプッシュできません。何が悪いのですか?gitの基本的な概念がどこかに欠けているような気がしますが、ランダムなgitのmanページを読んでも手がかりがありません。

私はgitを初めて使用するので、ばかになった場合は申し訳ありませんが、ドキュメントに頭を付け直すのに役立つ情報が見つかりません。

編集

追跡ブランチの概念は、私が欠けていたものです。私はその概念を理解したので、すべてが明確です。個人的には、git branch --track構文の方がよりも直感的であることがわかりgit checkout -b branch-name origin/branch-nameます。

助けてくれてありがとう!


頭を切り離さずにブランチを切り替えるには、Git 2.23(2019年8月)を使用します以下の私の回答をgit switch参照しください。
VonC、

回答:


114
# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

便宜上、ローカル名とブランチ名に同じ文字列を使用
できますorigin/branchname。チェックアウトしたとき、実際にはブランチをチェックアウトしていませんでした。 origin/branchnameは「リモート」名であり、それらのリストは

branch -a 

色を有効にすると、ローカルブランチは1つのカラーになり、リモートブランチは別のカラーになります。

切り替えて作業できるようにするには、まずリモートブランチをローカルで追跡する必要があります。


9
なぜ、「git checkout origin / branchname」がまだ追跡されていないのに、なぜブランチの追跡を自動的に開始しないのですか?
Martin Konicek 2010

4
外部ブランチのローカル名がまだ必要だからです。
ケントフレドリック2010

ここに私がやっていることとエラーメッセージがあります:$ git checkout -b topic / fetchアップストリーム/ topic / fetch fatal:git checkout:パスの更新はブランチの切り替えと互換性がありません。コミットとして解決できない 'upstream / topic / fetch'をチェックアウトするつもりでしたか?
ULU

2
色についてのヒントをありがとう。色を有効にするには:git config --global --add color.ui true
PonyEars

1
「origin / branchname」は、文字通りSHA1に解決されるもの、またはSHA1自体に解決される可能性があることに注意してください=)。私は定期的にそれを使用して、任意のルートを持つ任意のブランチを作成します。
ケントフレドリック2016年

16
git clone git@github.com:abc/def.git
cd def

次に、追跡ブランチを作成します。

git branch --track experimental origin/experimental
git checkout experimental

次に、そこで作業した後、単にgithubにプッシュします。

git push

3
git branch -t origin / experimental#それほど入力する必要はありません:)
ダスティン

追跡したいブランチは、トピック/フェッチと呼ばれます。$ git branch --trackトピック/フェッチアップストリーム/トピック/フェッチを実行しようとすると、致命的:有効なオブジェクト名ではありません: 'アップストリーム/トピック/フェッチ'。
ULU

1
@Dustin、そのコマンドは、ローカルマスターを追跡するローカルブランチ 'origin / experimental'を作成します。それはかなりよくある間違いだと思います。
PDug 2013

1
@PDug%git checkout -t origin / experimental Branch experimentalは、リベースすることにより、起点からリモートブランチの実験を追跡するように設定されています。新しいブランチ「実験的」に切り替え
ダスティン

11

ケントの返答をさらに詳しく説明すると、クローンを作成した後の唯一のブランチ(リモートはカウントされません)は、クローン元のリポジトリでアクティブだったブランチです(この場合はマスター)。

したがって、最初にリモートの実験ブランチを追跡するための新しいブランチを作成する必要があります。

$ git branch experimental origin/experimental

そしてそれをチェックしてください:

$ git checkout experimental

ただし、ケントは正しいです-これら2つのコマンドは組み合わせることができます

$ git checkout -b experimental origin/experimental

3

Git 2.23(2019年8月)では、次のコマンドを使用しますgit switch

同じ名前のリモートブランチがある場合、自動的に追跡されます。

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.