web-dev-qa-db-ja.com

git:ヘッドを取り外すことなくブランチを切り替える

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

今、別のマシンで、リポジトリのクローンを作成して(git clonerepository)、実験ブランチに切り替えます(git checkoutbranchname)しかし、これを行うたびに頭が外れ、変更をプッシュできません。私は何を間違えていますか?基本的なgitの概念をどこかで見逃しているような気がしますが、ランダムなgitのマニュアルページを読んでも手がかりが得られません。

私はgitが初めてなので、バカになっていたら申し訳ありませんが、ドキュメントに頭を付け直すのに役立つものが見つかりません。

[〜#〜] edit [〜#〜]

追跡ブランチの概念は、私が欠けていたものです。その概念を理解した今、すべてが明確になりました。個人的には、git branch --track構文は、git checkout -b branch-name Origin/branch-name

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

94
Dana Robinson
# 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色になり、リモートブランチは別の色になります。

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

106
Kent Fredric
git clone [email protected]:abc/def.git
cd def

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

git branch --track experimental Origin/experimental
git checkout experimental

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

git Push
16

ケントの返事を拡張するために、あなたがクローンをした後、あなたが持つ唯一のブランチ(リモートはカウントしません)は、あなたがクローンを作成したリポジトリでアクティブであったブランチです-あなたの場合はマスターです。

そのため、最初に新しいブランチを作成して、リモートの実験的なブランチを追跡します。

$ git branch experimental Origin/experimental

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

$ git checkout experimental

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

$ git checkout -b experimental Origin/experimental
11
Pat Notz

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'
0
VonC