新入りでgit
練習中です。ローカル ブランチを作成しましたが、作成したときにgit push
ブランチがリポジトリにアップロードされていないことがわかりました。私は実際にしなければなりませんでした: git push -u origin --all
.
どうしてこれなの?ブランチは、デフォルトでプッシュされる新しい変更ではありませんか? 2 番目のコマンドを実行する必要があるのはなぜですか?
8 に答える
あなたはしません、以下を参照してください
私はロケットを月に打ち上げようとしているのではなく、私のいまいましいブランチをプッシュするだけなので、この「機能」はかなり面倒です。あなたもおそらくそうしなければ、ここにいないでしょう!
修正方法は次のとおりです。現在のブランチがオリジンに存在するかどうかに関係なく、現在のブランチを暗黙的にプッシュする場合は、このコマンドを 1 回発行するだけで、どこでも再度実行する必要はありません。
git config --global push.default current
したがって、次のようなブランチを作成する場合:
git checkout -b my-new-branch
そして、いくつかのコミットを行ってから、
git push -u
それらをオリジン(そのブランチ上にある)に出すと、ブランチが存在しない場合は、そのブランチが作成されます。
-u ビットは、後で上記のブランチからプルする場合にそれらがリンクされていることを確認することに注意してください。後でブランチをプルする予定がない場合 (またはプルする場合は別のライナーで問題ない場合)、-u は必要ありません。
git push
新しいブランチをプッシュしたときの出力
> git checkout -b new_branch
Switched to a new branch 'new_branch'
> git push
fatal: The current branch new_branch has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin new_branch
git push
現在のローカル ブランチが追跡しているリモート ブランチが既に存在すると単純に仮定します。-u
そのようなリモート ブランチが存在せず、それを作成する場合は、 (の短縮形--set-upstream
) フラグを使用して指定する必要があります。
これはなぜですか?実装者は、リモートでブランチを作成することは非常に大きなアクションであり、誤って実行するのは難しいはずだと感じていたのでしょう。git push
あなたがいつもしていることです。
「ブランチはデフォルトでプッシュされる新しい変更ではありませんか?」Git の「変更」はコミットだと思います。ブランチはコミットへのポインタです。私にとっては、プッシュを他のリポジトリにコミットをプッシュするものと考える方が理にかなっています。どのコミットがプッシュされるかは、現在のブランチと、そのブランチとリモートのブランチの追跡関係によって決まります。
ブランチの追跡について詳しくは、Pro Git ブックのリモート ブランチの章を参照してください。
この問題のさらなる順列を経験しました。
私は Jira イシュー 1234 に取り組んでいたので、名前の付いたブランチを持っていましたfeat/XYZ-1234-some-description
。作業中に、小さな作業を追跡するために新しい Jira イシューを作成し、プッシュするようになったときに、この新しいイシュー番号でブランチ名にプッシュすることにしました。の:
git push -u origin feat/XYZ-5678-a-different-description # failed
これにより、このSOスレッドで議論されているエラーが発生しました。しかし、現在のブランチとは別のブランチ名にプッシュしようとしていたため、ここで説明されている問題とは異なりました。プッシュする前に、ローカルブランチの名前を変更してしまいました。
git branch -m feat/XYZ-1234-some-description feat/XYZ-5678-a-different-description
git push -u origin feat/XYZ-5678-a-different-description # now works
もう少し読んだ後、現在のブランチ名、または必要に応じて に asrc
を
設定できることに気付きました。git push
HEAD
git push -u origin feat/XYZ-1234-some-description:feat/XYZ-5678-a-different-description # also works