2009-05-06 3 views
18

「git push」が2つのブランチにコミットしようとする原因は何でしょうか?私は自分のブランチを持っています。私は自分のブランチを共有しています。今私はちょうどいいところを通ってきた私の個人的な支店にプッシュしたいと思っていましたが、それはまた習得して拒否されました。なぜこのgit pushでgitを2つのブランチにプッシュするのですか?

foo$ git push 
Counting objects: 38, done. 
Delta compression using 2 threads. 
Compressing objects: 100% (19/19), done. 
Writing objects: 100% (21/21), 9.73 KiB, done. 
Total 21 (delta 14), reused 0 (delta 0) 
To ssh://example.com/project.git 
    8184634..86b621e mybranch -> mybranch 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to 'ssh://example.com/project.git' 

私の設定は次のようになります:

remote.origin.url=ssh://example.com/project.git 
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* 
branch.master.remote=origin 
branch.master.merge=refs/heads/master 
branch.mybranch.remote=origin 
branch.mybranch.merge=refs/heads/mybranch 

エスコは、彼らが私の設定にしているので、それは両方にプッシュだと指摘し、このようなものを見ました。両方にプッシュしたいのであれば、同時にはできません。私が自分の枝をチェックアウトして、私が押しているとき、私は明らかにマスターではなく、ミルブランチを押すことを意味します。チェックアウトマスター、コード編集、それをコミット/プッシュしたい時があります。共存する方法はありますか?

答えて

26

引数なしでgit pushを使用すると、対応するリモートブランチが同じ名前のすべてのローカルブランチがプッシュされます。あなたのローカルリポジトリはブランチmastermybranchを持ち、リモートリポジトリもブランチmastermybranchを持っているので、Gitはそれらの両方を押します。 git push origin mybranch

あなたがマスターをプッシュしたい場合は、最初にマスターから引いて、そのエラーを修正することができます:あなたは1つのブランチのみをプッシュしたい場合

、あなたは明示的にプッシュすることどのブランチをGitはと言うことができます。 Gitはあなたがマスターから引っ張った最後の時間以来、他の誰かがマスターにコミットをプッシュしているので、マージが早送りではないと不平を言う。

+0

でもない私は何でだけではない、それらの両方をプッシュするならば同時?私はミブブランチだけをプッシュしたい時があります。ミーブランチをマスターに統合し、マスターをプッシュしたい時があります。その場合、人は何をしますか? – Coocoo4Cocoa

+0

"git push "という形式を使用して、プッシュしたいブランチにいつでも明示的に名前を付けることができます。 http://www.kernel.org/pub/software/scm/git/docs/git-push.html –

+0

gitの新しいバージョンでは、この動作を指定することができます。 – Dustin

3

現在のブランチだけをプッシュしたい場合は、 "git push origin HEAD"、あるいは "git push HEAD"(現代git)を使うことができます。

プッシュにはrefspec(ため、定義したrefspecがプッシュのためにあなたのconfigにではなくを取得しない)場合は、デフォルトの動作では、一致レフリーをプッシュすることです。 [...]

Gitのプッシュ[<リポジトリ><refspec> ...]

<refspec> ...

git-push(1)から特別なrefspec:(または+:早送り以外の更新を許可する) はgitに "マッチする"ブランチをプッシュするように指示します。ローカル側に が存在するすべてのブランチに対して、リモート側に同じ名前の のブランチがすでに存在する場合、リモート側が更新されます。明示的なrefspecが見つからない場合、これがデフォルト 動作モードである(つまりは のコマンドラインでも...

+0

新しい(er)git(1.6.3.1など)で "git push"を実行すると、push.defaultを設定する必要があるという巨大な警告が表示されるか、リポジトリがpush refspecを設定する必要があります。 私の人生のために、2番目のことをどうやって行うかを理解できません。 Googleは役に立たなかった。 (リポジトリを設定したいのですが、私のリポジトリへの潜在的なpush'ersは大きな脂肪警告に混乱/迷惑になるので、 "git clone ..."の後に何も設定する必要はありません) – asjo

+2

リモートを設定(設定)します。 .pushの場合、はおそらくあなたの場合 'origin'になり、は "+ refs/heads/*"(タグでも同じです) –

関連する問題