Gitで新しいブランチを作成します。
git branch my_branch
押して:
git Push Origin my_branch
今、誰かがサーバーに何らかの変更を加えたとします。私はOrigin/my_branch
からプルしたいと思います。私がやります:
git pull
しかし、私は得ます:
You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "my_branch"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
私はそれがうまくいくようにできることを学びました:
git branch --set-upstream my_branch Origin/my_branch
しかし、作成したすべてのブランチに対してこれを実行する必要があるのはなぜですか? my_branch
をOrigin/my_branch
にプッシュした場合、Origin/my_branch
をmy_branch
にプルする必要があることは明らかではありませんか。どうすればこれをデフォルトの動作にすることができますか?
ショートカット。これはgit branch --set-upstream
の構文を覚えていることには依存しません 1 することです:
git Push -u Origin my_branch
...あなたがそのブランチを初めてプッシュする時。または、現在のブランチを同じ名前のブランチにプッシュするには(別名に便利です):
git Push -u Origin HEAD
あなたは一度だけ-u
を使う必要があり、それはあなたのブランチとOrigin
のブランチの間の関連付けをgit branch --set-upstream
と同じ方法で設定します。
個人的には、ブランチとリモートのブランチとの関連付けを明示的に設定する必要があるのは良いことだと思います。規則が git Push
とgit pull
で異なる であることはただ残念です。
1 それは愚かに聞こえるかもしれませんが、私は非常に頻繁に現在のブランチを指定することを忘れています。
更新2012-10-11 :どうやら私はそれが間違って取得するのが簡単だと思った唯一の人ではない! VonC に感謝します。git 1.8.0ではもっと明白なgit branch --set-upstream-to
が導入されています。ブランチmy_branch
にいる場合は、次のように使用できます。
git branch --set-upstream-to Origin/my_branch
...または短いオプションで
git branch -u Origin/my_branch
この変更とその理由は、 git 1.8.0のリリースノート、リリース候補1 で説明されています。
git branch --set-upstream Origin/master
と言いたくなりましたが、ローカルブランチのOrigin/master
を現在チェックアウトされているブランチと統合するようにGitに指示しています。このオプションは非推奨です。代わりに新しい--set-upstream-to
(手短に使える-u
)オプションを使用してください。
これは、少ない入力で実現できます。まず、あなたのプッシュの動作方法を変更します。
git config --global Push.default current
これはOrigin my_branch
部分を推論するでしょう、それであなたはすることができます:
git Push -u
どちらも同じ名前のリモートブランチを作成して追跡します。
簡単にできます
git checkout -b my-branch Origin/whatever
そもそも。 branch.autosetupmerge
またはbranch.autosetuprebase
(私のお気に入り)をalways
(デフォルトはtrue
)に設定すると、my-branch
は自動的にOrigin/whatever
を追跡します。
git help config
を参照してください。
2つの方法でアップストリームを簡単に設定できます。最初にブランチを作成するとき:
git branch -u Origin/my-branch
あるいは、ブランチを作成した後にこのコマンドを使用することができます。
git Push -u Origin my-branch
単一のコマンドで分岐し、チェックアウトし、上流に設定することもできます。
git checkout -b my-branch -t Origin/my-branch
私の個人的な好みは、2段階のコマンドでこれを実行することです。
git checkout -b my-branch
git Push -u Origin my-branch
これが The Fuck の私の最も一般的な使い方です。
$ git Push
fatal: The current branch master has no upstream branch.
To Push the current branch and set the remote as upstream, use
git Push --set-upstream Origin master
$ fuck
git Push --set-upstream Origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...
また、あなたの端末に誓いの言葉をタイプするのも楽しいです。
あなたが使用することができます:
git config --global branch.autosetupmerge always
新しいブランチを作成またはチェックアウトするたびに、アップストリームブランチにリンクします。
https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/ /を参照してください。
これはautosetuprebaseでも機能します。よりリベースを重視したワークフローに従う場合ですが、自分のしていることがわからない限りこれを使用しないでください。
ちなみに、現在のブランチを同じ名前のリモートにプッシュするショートカットは次のとおりです。
$ git Push -u Origin HEAD
git branch --set-upstream-to=Origin/master<branch_name>
価値のあることに、リモートに既に存在するブランチ(例:Origin/somebranch)を追跡しようとしているが、まだローカルにチェックアウトしていない場合は、次のようにすることができます。
$ git checkout --track Origin/somebranch
注: '-t'は '--track'オプションの短縮版です。
これは、すぐに同じ関連付けを設定します。
私は個人的にこれらの次のエイリアスをbashで使っています
〜/ .gitconfigファイル内
[alias]
pushup = "!git Push --set-upstream Origin $(git symbolic-ref --short HEAD)"
および〜/ .basehrcまたは〜/ .zshrcファイル
alias gpo="git pushup"
alias gpof="gpo -f"
alias gf="git fetch"
alias gp="git pull"
Git pullにどのリモートブランチをプルするかを明示的に指示することもできます(エラーメッセージに記載されているとおり)。
git pull <remote-name> <remote-branch>
ただし、これには注意してください。 あなたが別のブランチにいて明示的にpullを実行すると、pullしたrefspecが現在のブランチにマージされます。
毎回Gitからの提案をコピー/ペーストする代わりにこのGitエイリアスを使用します。 https://Gist.github.com/ekilah/88a880c84a50b73bd306
ソースを以下にコピーしてください(これをあなたの~/.gitconfig
ファイルに追加してください):
[alias]
pushup = "!gitbranchname() { git symbolic-ref --short HEAD; }; gitpushupstream() { git Push --set-upstream Origin `gitbranchname`; }; gitpushupstream"
過度に冗長な構文なしでこれを処理できる本当に良いエイリアスを設定することができます。
私は~/.gitconfig
に次のエイリアスがあります。
po = "!git Push -u Origin \"$(git rev-parse --abbrev-ref HEAD)\""
新しいブランチをコミットした後は、次のコマンドを入力するだけで新しいブランチをプッシュできます。
git po
以下が機能しない場合:
git config --global Push.default current
また、プロジェクトにローカルgit構成がある可能性があるため、プロジェクトのローカル構成も更新する必要があります。
git config --local Push.default current
git pull
で動作するエイリアスを探している人のために、これが私が使うものです:
alias up="git branch | awk '/^\\* / { print \$2 }' | xargs -I {} git branch --set-upstream-to=Origin/{} {}"
今すぐあなたが得るたびに:
$ git pull
There is no tracking information for the current branch.
...
とにかく走れ:
$ up
Branch my_branch set up to track remote branch my_branch from Origin.
$ git pull
そして行ってもいいです
git Push -u Origin $(current_branch)
もできます
なぜならgitは異なるブランチを異なる「上流の」リポジトリにプッシュ/プルするクールな能力を持っているからです。同じブランチでプッシュとプルのために別々のリポジトリを使うことさえできます。これは分散したマルチレベルフローを作成することができます、私はこれがLinuxカーネルのようなプロジェクトに役立つのを見ることができます。 Gitはもともとそのプロジェクトで使用するために構築されました。
結果として、それはあなたのブランチがどのレポを追跡すべきかについての仮定をしません。
一方、ほとんどの人はこのようにgitを使っていないので、デフォルトのオプションでは良いケースかもしれません。
Gitは一般的にかなり低レベルであり、それはイライラすることがあります。それでもGUIがあり、あなたがまだシェルからそれを使いたいのであれば、ヘルパースクリプトを書くのは簡単なはずです。
私達はphabricatorを使い、gitを使ってプッシュしません。私はLinux/mac上で動作するbashエイリアスを作成しなければなりませんでした
vim ~/.bash_aliases
new_branch() {
git checkout -b "$1"
git branch --set-upstream-to=Origin/master "$1"
}
保存する
source ~/.bash_aliases
new_branch test #instead of git checkout -b test
git pull
私はある種の再発見された legit
この問題のために(OS Xのみ)。分岐するときに使用するのは、次の2つのコマンドだけです。
legit publish [<branch>]
指定されたブランチをリモートに公開します。 (エイリアス:pub
)
legit unpublish <branch>
指定されたブランチをリモートから削除します。 (エイリアス:unp
)
SublimeGit はデフォルトでlegit
をサポートしています。これにより、分岐ルーチン全体がCtrl-bを押すのと同じくらい簡単になります。
これはgit Pushのbash別名です。これはすべてのPushに対して安全に実行でき、最初のPushのアップストリーム設定とその後の通常のプッシュの間で自動的に切り替わります。
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git Push -u Origin $(git symbolic-ref --short HEAD) || git Push'