私は新しくてgit
、練習しています。ローカルブランチを作成しましたが、作成したときにgit push
自分のブランチがリポジトリにアップロードされていないことがわかりました。私は実際にやらなければなりませんgit push -u origin --all
でした:。
どうしてこれなの?ブランチはデフォルトでプッシュされる新しい変更ではありませんか?2番目のコマンドを実行する必要があるのはなぜですか?
私は新しくてgit
、練習しています。ローカルブランチを作成しましたが、作成したときにgit push
自分のブランチがリポジトリにアップロードされていないことがわかりました。私は実際にやらなければなりませんgit push -u origin --all
でした:。
どうしてこれなの?ブランチはデフォルトでプッシュされる新しい変更ではありませんか?2番目のコマンドを実行する必要があるのはなぜですか?
回答:
実際の理由は、新しいリポジトリ(git init)にブランチがない(ブランチがない、ブランチがない、ブランチがないmaster
)ことです。
したがって、初めて空の 上流リポジトリ(通常はベアリポジトリ)にプッシュする場合、その上流リポジトリには同じ名前のブランチがありません。
そして:
matching
」、(彼らが存在しない場合は、それらを作成し、同じ名前のすべての支店を押します)simple
'です(現在のブランチのみをプッシュし、git 1.7.11以降、同様の名前のリモートトラッキングブランチがアップストリームにある場合のみ)どちらの場合も、上流の空のリポジトリにはブランチがないため、
つまり、ローカルの最初のプッシュはまったくわかりません。
したがって、少なくとも次のことを行う必要があります。
git push origin master
しかし、それだけを行うと、次のようになります。
master
ブランチを作成します(現在は空でないリポジトリ):良いです。master
origin
master
そのため、最初のプッシュでは、次のことを行うことが推奨されます。
git push -u origin master
これorigin/master
により、リモートトラッキングブランチとして記録され、次のプッシュが自動的にプッシュさmaster
れるようになりorigin/master
ます。
git checkout master
git push
また、プッシュポリシー ' current
'または ' upstream
'でも機能します。
いずれの場合も、最初のの後、git push -u origin master
単純なgit pushでマスターを右の上流ブランチにプッシュし続けることができます。
git push
はブランチがすでに存在することも期待していますか?
simple
'のため:上流のブランチがローカルブランチと同じ名前を持つ場合、記録された上流のブランチにプッシュします。シンプルgit push
で十分です。
git push --set-upstream origin new_branch
またはgit push -u origin new_branch
を使用します。-all
質問者は、すべての枝を含むことによって、特定の新しいブランチを命名バイパス使用していること。+ Klas Mellbournが彼の回答でカバーしています。
あなたはしません、以下を見てください
ロケットを月に向けて発射するつもりはないので、この「機能」はかなり迷惑だと思います。いまいましいブランチを押してください。おそらくあなたもそうしないと、あなたはここにいないでしょう!
ここに修正があります:現在のブランチがoriginに存在するかどうかに関係なく暗黙的に現在のブランチをプッシュしたい場合は、このコマンドを1度発行するだけで、どこにも再度実行する必要はありません。
git config --global push.default current
したがって、次のようなブランチを作成するとします。
git checkout -b my-new-branch
そしていくつかのコミットをしてから
git push -u
それらを元の場所に(そのブランチ上にある)取得し、存在しない場合は、そのブランチを作成します。
上記のブランチから後でプルする場合、-uビットはそれらが確実にリンクされることに注意してください。後でブランチをプルする予定がない場合(または、別のライナーを使用しても問題ない場合)、-uは必要ありません。
git push -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ブックのリモートブランチの章を参照してください。
fatal
が、ブランチですでにコミットを実行していました。
git push -u origin
、リモートリポジトリにコピーされます。
fatal
であなたが言及したようなメッセージを受け取っていないという事実を意味します。この違いは、ブランチに何かをコミットしたという事実に依存しますか?
fatal
メッセージが届かなかったのかわかりません。違いは、使用しているgitの実装によって異なります。私の出力は1.8.1.msysgit.1からのWindows 8上で実行されている
元の開発者による根拠はこれほど早く見つかりませんでしたが、Gitの数年の経験に基づいて、知識に基づいた推測を提供できます。
いいえ、すべてのブランチが外部にプッシュしたいものではありません。それは私的な実験を表すかもしれません。
さらに、git push
すべてのブランチをどこに送信する必要がありますか?Gitは複数のリモートで動作するため、それぞれに異なるブランチセットが必要になる場合があります。たとえば、中央プロジェクトのGitHubリポジトリにはリリースブランチがある場合があります。GitHubフォークには、レビュー用のトピックブランチがある場合があります。ローカルGitサーバーには、ローカル構成を含むブランチがある場合があります。git push
現在のブランチが追跡するリモートにすべてのブランチをプッシュする場合、この種のスキームは簡単に失敗します。
It might represent a private experiment
わかりましたが、大したことは何ですか?誰もが作業している「メイン」ブランチ、つまりmaster
影響を受けません。ソースコードを隠しておくつもりでない限り2)git push, without a remote, pushes to the current branch's remote
私はここであなたを失いました:(
git fetch
毎回何百ものハーフワーキングブランチにしたくありません。2)git push
のデフォルトの動作を指します。もしあれば、現在のブランチが追跡していることをリモートにプッシュします。
HEADは現在のブランチの略なので、git push -u origin HEADが機能します。ここで、エイリアスを使用するたびにこの入力を回避します。
git config --global alias.pp 'push -u origin HEAD'
この後、git -bブランチで作成したブランチをプッシュするたびに、次のコマンドを使用してプッシュできます。
git pp
これが誰かの時間を節約することを願っています!
まずチェック
ステップ-1:git remote -v
// git初期化が見つかった場合は、ステップ2を削除またはスキップします
ステップ-2:git remote rm origin
//その後、メールアドレスをグローバルに設定しますgit
ステップ-3: git config --global user.email "youremail@example.com"
ステップ-4: git initial
ステップ5:git commit -m "Initial Project"
//すでにプロジェクトリポジトリを追加している場合は、ステップ6をスキップします
ステップ-6: git remote add origin %repo link from bitbucket.org%
ステップ-7: git push -u origin master
私はこの問題のさらなる順列を経験しました。
feat/XYZ-1234-some-description
Jira課題1234で作業していたため、名前が付けられたブランチがありました。作業中に、より小さな作品を追跡するために新しい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
もう少し読んだ後、私はにを現在のブランチ名または適切な場合にだけ設定できることに気づきsrc
ました
:git push
HEAD
git push -u origin feat/XYZ-1234-some-description:feat/XYZ-5678-a-different-description # also works
新しいブランチから新しい変更を初めてプッシュできるようにする場合。そしてエラーを下回る:
*git push -f
fatal: The current branch Coding_Preparation has no upstream branch.
現在のブランチをプッシュし、リモートをアップストリームとして設定するには、次を使用します
git push -u origin new_branch_name
** Successful Result:**
git push -u origin Coding_Preparation
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 599 bytes | 599.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'Coding_Preparation' on GitHub by visiting: ...
* [new branch] Coding_Preparation -> Coding_Preparation
Branch 'Coding_Preparation' set up to track remote branch 'Coding_Preparation' from 'origin'.
push.default
、を参照man git-config
)。実行するとgit config --add push.default current
、git push
必要に応じてリモートリポジトリにブランチが自動的に作成されます。これがデフォルトではない理由は、回答で説明されています。