私の同僚と私は同じリポジトリに取り組んでいますが、技術的には異なるプロジェクト用に2つのブランチに分けていますが、類似点があるため、master
から* branch
にコミットしたいことがあります。
しかし、私はbranch
を持っています。私の質問は、同僚がどのようにしてそのブランチを明確に引っ張ることができるでしょうか?です。
リポジトリのgit clone
は彼のためにローカルにブランチを作成しているようには見えませんが、プッシュが終了した後にそれらが実行されているのがわかります。
また、私が最初にブランチを作ったとき、私は-b checkout
をしました。 違いが大きいかどうかわからない?
$ git branch -r
Origin/HEAD -> Origin/master
Origin/daves_branch
Origin/discover
Origin/master
$ git fetch Origin discover
$ git checkout discover
これらは私が実行したコマンドです。しかし、それは間違いなく機能していません。
そのブランチをチェックアウトしてから、さまざまな共同作業者やワークステーションからのブランチの変更だけをプッシュしてコミットし直したい。
リモートブランチを追跡するローカルブランチを作成する必要があります。次のコマンドは、 daves_branch という名前のローカルブランチを作成し、リモートブランチ Origin/daves_branch を追跡します。変更をプッシュすると、リモートブランチが更新されます。
最新バージョンのgitの場合
git checkout --track Origin/daves_branch
--track
はgit checkout -b [branch] [remotename]/[branch]
の省略形です。ここで、[remotename]は Origin 、この場合は[branch]は2倍同じです。 daves_branch です。
Git 1.5.6.5ではこれが必要でした。
git checkout --track -b daves_branch Origin/daves_branch
Git 1.7.2.3以降ではこれで十分です(もっと早く開始したかもしれませんが、これは私がすぐに見つけることができる最も早い確認です):
git checkout daves_branch
最近のgitバージョンでは、このコマンドはローカルブランチを作成せず、あなたを 'detached HEAD'状態にします。ローカルブランチが必要な場合は、--track
オプションを使用してください。ここに完全な詳細: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
fetch
に続いて checkout
を使用しました...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
...ここで<rbranch>
はリモートブランチまたはソースrefであり、<lbranch>
はまだnon-existentローカルブランチまたはdestination ref追跡したいもので、おそらくリモートブランチまたはソースrefと同じ名前を付けたいもの。これについては、<refspec>
の説明の options で説明されています。
Gitは非常に賢いので、リモートブランチの最初の数文字の後にItabがあれば、最初のコマンドを自動的に完了します。 IE:ローカルブランチに名前を付ける必要はありません。Gitはリモートブランチの名前を自動的にコピーします。ありがとうGit!
また、 この同様のSO投稿の回答 が示すように、fetch
でローカルブランチに名前を付けなくても、-b
フラグを使用してチェックアウトするときに作成できます。 。IE:git fetch <remote> <branch>
に続くgit checkout -b <branch> <remote>/<branch>
は、最初の回答とまったく同じです。そして明らかに、レポジトリにが1つしかないリモートがある場合、fetch
の後にgit checkout <branch>
を実行するだけで、ローカルブランチが作成されます。EG:リポジトリを複製し、リモートから追加のブランチをチェックアウトしたい。
fetch
のドキュメントの一部は、 pull
から逐語的にコピーされた可能性があると思います。特に、 options の<refspec>
に関するセクションは同じです。ただし、fetch
が merge
になるとは思わないので、コロンの宛先側を空のままにするとfetch
は何もしないはずです。
注:git fetch <remote> <refspec>
はgit fetch <remote> <refspec>:
の短縮形であり、したがって何もしませんが、git fetch <remote> <tag>
は、リモートのgit fetch <remote> <tag>:<tag>
をローカルにコピーする<tag>
と同じです。
これは、リモートブランチをローカルにコピーしたいが、すぐにチェックアウトする必要がない場合にのみ役立つと思います。それ以外の場合は、 上記の承認済みの回答 を使用します。これについては、 checkout description の最初のセクションで説明し、後で説明の options セクションで説明します--track
の1ライナーであるため。えーと...1ライナーの並べ替え。まだ最初にgit fetch <remote>
を実行する必要があるため。
参考:<refspecs>
(source:destination)の順序は、 リモートブランチを削除する のGit-1.7以前の奇妙なメソッドを説明しています。 IE:宛先refspecに何もプッシュしません。
新しいリモートブランチ(ローカルには存在し、ローカルには存在しない)を「チェックアウト」しようとしている場合は、次のようになります。
git fetch Origin
git checkout --track Origin/<remote_branch_name>
これは Origin から取得したいと仮定しています。そうでない場合は、 Origin をあなたの remote の名前に置き換えてください。
ローカルではなくリモートに存在するmyBranchをチェックアウトするには - これは私にとってはうまくいった:
git fetch --all
git checkout myBranch
私はこのメッセージを受け取りました:
Branch myBranch set up to track remote branch myBranch from Origin
Switched to a new branch 'myBranch'
すべてのリモートとそのブランチを表示するには、git branch -a
(ローカルブランチとリモートブランチの両方)またはgit branch -r
(リモートブランチのみ)を使用します。その後、リモートに対してgit checkout -t remotes/repo/branch
を実行してローカルブランチを作成できます。
そのリモートのすべての参照とタグを見るためのgit ls-remoteコマンドもあります。
タイトルと質問が混同されています:
問題がどうやってリモートブランチを動作させることができるのか、またはリモートブランチをチェックアウトする方法について質問するなら、もっと簡単な解決策は:
Git(> = 1.6.6)を使えば、あなたは使うことができます:
git checkout <branch_name>
ローカルの<branch_name>
が見つからないが、名前が一致する1つのリモートに追跡ブランチが存在する場合は、次のように処理します。
git checkout -b <branch_name> --track <remote>/<branch_name>
あなたの友達のために:
$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
git checkout -b serverfix Origin/serverfix
これは、gitが--trackの短縮形を提供するのに十分な一般的な操作です。
git checkout --track Origin/serverfix
実際、これは非常に一般的なので、そのショートカットにもショートカットがあります。チェックアウトしようとしているブランチ名(a)が存在せず、(b)1つのリモコンの名前と完全に一致する場合、Gitはトラッキングブランチを作成します。
git checkout serverfix
ローカルブランチをリモートブランチとは異なる名前で設定するには、最初のバージョンを異なるローカルブランチ名で簡単に使用できます。
git checkout -b sf Origin/serverfix
今、あなたのローカルブランチsfは自動的にOrigin/serverfixから引き出されます。
出典: Scott ChaconとBen Straubによって書かれたPro Git 2nd Edition (読みやすくするためにカット)
この簡単なコマンドで:
git checkout -b 'your_branch' Origin/'remote branch'
それをする最も簡単な方法は、少なくとも私にとっては:
git fetch Origin <branchName>
あなたもワンショットでリモートブランチを取得してチェックアウトすることができます -
git fetch && git checkout the-branch-name
git fetch
git branch -r
git checkout <branch_name>
私がタイプした
git checkout <branch_name>
そして得た
Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Switched to a new branch '<branch_name>'
私を助けたのは
1)利用可能なすべてのリモートブランチを表示する(例: 'remote-branch-name')
git branch -r
2)リモートブランチ名を使ってローカルブランチを作成する
git fetch && git checkout 'remote-branch-name'
時々、あなたはマスターブランチをいじらないで、リモートブランチだけを動かすように頼まれます(私が求められたように)。だから必要なのはリモートブランチだけです。
リモートブランチを単独で(マスターなしで)クローンするには、こうします。
git clone url --branch remote_branch_name
remote_branch_nameは、リモートブランチの名前です。
例えば、
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
これにより、リモートブランチの名前を使用して、リモートブランチをローカルブランチに確実に複製できます。
コードをコミットしてプッシュすると、コードはそのブランチにのみ送信されます。
git fetch --all & git checkout <branch name>
あなたのリモコンは[email protected]で、random_branchブランチが欲しいとしましょう。プロセスは次のとおりです。
まずあなたのリモコンのリストを確認してください。
git remote -v
上記のコマンドの出力に[email protected]リモートがない場合は、次のように追加します。
git remote add xyz [email protected]
git fetch xyz
git checkout -b my_copy_random_branch xyz/random_branch
git branch -a
ローカルブランチmy_copy_random_branchは、リモートのrandom_branchブランチを追跡します。
git fetch && git checkout <your friend's branch name>
がうまくいくはずです
すべてのリモートブランチをあなたのlocalにフェッチし、新しく作成したローカルブランチに切り替えるためのonelinerコマンドを与えたいと思います。
git fetch && git checkout discover
上記のコマンドを実行した後、メッセージの下に表示されます。
Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from Origin.
最初の行には、 新しいブランチに切り替えました - なぜ新しいのですか?それはもうリモートにあります!.
しかし、実際にはローカルにも作成する必要があります。ブランチはリモートインデックスから取得され、ローカルに作成されます。
ここでdiscover
はあなたのリポジトリのリモートブランチdiscover
から作られた新しいブランチです。
しかし、2行目は、最初の行よりも多くの情報を提供します。
私たちのブランチは同じ名前でリモートブランチを追跡するように設定されています。
git fetch
はすべてのbranchをローカルにフェッチしますが、その後にgit branch
を実行した場合、local なぜにはmaster
ブランチしか表示されません。
上記の例で行ったようにgit checkout <branchname>
として追跡するためには、リモートにあるすべてのブランチに対してローカルにも作成する必要があるためです。
git checkout
コマンドを実行した後、git branch
を実行することができます今、あなたは両方のブランチを見ることができます:
手順は次のとおりです。
git fetch Origin
またはgit fetch --all
、これはあなたのローカルへのすべてのリモートブランチを取得し、次にこれがあなたが進むことができる2番目のオプションです。
git checkout --track Origin/<The_remote_branch you want to switch over>
それからこの枝に取り組み、あなたはあなたがその枝にいるかどうか確かめることができる
git branch
あなたが現在いるブランチが表示されます。
単純に試す
$ git pull Originあなたのブランチ名
あなたがすでにあなたのリモートブランチを知っているのであれば….
git remote
=> One
=> Two
そして、あなたはあなたがexをチェックアウトしたい支店名を知っています。 br1.2.3.4 その後
git fetch One
=> returns all meta data of remote i.e. the branch name in question.
残っているのはブランチをチェックアウトすることだけです
git checkout br.1.2.3.4
それからそれから新しい分岐を作る。
すべてのリモートブランチを取得したい場合は、単に入力してください
git fetch --all
他の誰かがすべてのリモートブランチを見るのに役立つことを願っています。
あなたの.git/config
をチェックしてください、特にそのリモートの fetch にどんな追跡があるのか。
[remote "randomRemote"]
url = [email protected]:someUser/someRepo.git
fetch = +refs/heads/*:refs/remotes/randomRemote/*
heads/*
がrandomRemote/*
を指している場合、git fetch randomRemote
を実行すると、すべてのブランチが取得されます。それからあなたはただその枝をチェックアウトすることができます。
さもないと、
これを使ってトラッキングにリモートブランチを追加する必要があります。これを実行した後あなたの.git/config
をチェックしてください。あなたは理解するでしょう。 gitリモートセットブランチ--add randomRemote randomBranch
git fetch randomRemote
を実行してください。これはリモートブランチを取得します。
これでgit checkout randomBranch
を実行できます
--depth 1で複製されたリポジトリがある場合、リストされているコマンドの多くは機能しません。例えばこちら
% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch Origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
* branch other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%
この場合はリポジトリを再クローンしますが、おそらく他の手法もあります。 git shallow clone(clone --depth)がリモートブランチを見逃す
リモートに存在するブランチを取得するための最も簡単な方法は次のとおりです。
git checkout branchName
これはあなたのローカルにリモートブランチを取得し、自動的にリモートブランチを追跡します。
git branch <name> --track Origin/<name>
あなたはあなたの枝を分離しておくために 'git pull'を使います。 'lbranch'と 'rbranch'は解読が難しいので、実際のリポジトリ名とブランチ名を使用して説明します。
使用しましょう:
支店がいくつあっても、あなたや同僚はこれを実行して自分の支店のみを引っ張ることができます。
git init git pull [email protected]:myteam/tlc daves_branch:refs/remotes/Origin/daves_branch
簡単なコマンド - "git checkout remote_branch_name"は、リモートブランチにすべての変更を加えたローカルブランチを作成するのに役立ちます。