Gitブランチを1つだけ(他のブランチはなし)プッシュするにはどうすればよいですか?


247

ローカルのgitリポジトリに取り組んでいます。2つのブランチがmasterありfeature_xます。

feature_xリモートリポジトリにプッシュしたいのですが、masterブランチの変更をプッシュしたくありません。

ウィルgit push origin feature_x私からfeature_xの分岐(feature_xブランチがすでにリモートに存在する)の作品?

現在、マスターにプッシュすることができないため、これを自分のボックスでテストしたくありません。


ここを見てください:リモートとここ:動作するようにブランチをgithub Soundsにプッシュします。

回答:


376

はい、次のようにしてください

git checkout feature_x
git push origin feature_x

54
最新のgitを使用すると、単に「git push origin HEAD」、または「git push HEAD」で現在チェックアウトされているブランチのみをプッシュできるはずです。
JakubNarębski、2009

2
feature_xへのチェックアウトは必要ですか?
hd。

5
はい。マスターにいる場合は、ローカルのマスターブランチをリモートのfeature_xブランチにプッシュしようとするためです。最初にチェックアウトする必要がないようにするには、「git push origin feature_x:feature_x」を実行する必要があります
cpjolicoeur

1
私が他の質問で見た@cpjolicoeur(例:ここ)は彼らがやっているgit push -u origin <branch-name>。しかし、あなたはそれについて言及しませんでした。必要ですか ?
riroo 2017年

3
@miss_R コマンドの-uオプションは、git-pushプッシュされたブランチを追跡するための上流参照を設定します。これgit-pullにより、将来そのブランチのようなものが、指定せずにどのブランチからプルするかをすでに知っています。単一のブランチをプッシュするオプションとしては必須ではありませんが、ローカルブランチをプッシュするリモートブランチに追跡させたいと考える人が多いため、広く使用されています。
cpjolicoeur 2017年

74

デフォルトでgit pushは、すべてのリモートブランチを更新します。ただし、現在のブランチだけを上流に更新するようにgitを構成できます。

git config push.default upstream

これは、git pushを実行すると、gitが現在の(チェックアウトされた)ブランチのみを更新することを意味します。

その他の有効なオプションは次のとおりです。

  • nothingrefspecが明示的に指定されていない限り何もプッシュしないでください(エラーアウト)。これは主に、常に明確にすることで間違いを避けたい人を対象としています。
  • matching:両端で同じ名前を持つすべてのブランチをプッシュします。(Ver 1.7.11より前のデフォルトオプション)
  • upstream:現在のブランチを上流のブランチにプッシュします。このモードは、通常プルするのと同じリポジトリ(つまり、中央ワークフロー)にプッシュする場合にのみ意味があります。ローカルブランチとリモートブランチに同じ名前付ける必要はありません
  • tracking:非推奨upstream。代わりに使用してください。
  • current:現在のブランチを受信側の同じ名前のリモートブランチにプッシュします。中央ワークフローと非中央ワークフローの両方で機能します。
  • simple:[Ver 1.7.11以降で利用可能]集中型ワークフローでupstream、上流のブランチの名前がローカルのブランチの名前と異なる場合にプッシュを拒否する安全性を追加したように機能します。通常プルするリモートとは異なるリモートにプッシュする場合は、として機能しcurrentます。これは最も安全なオプションであり、初心者に適しています。このモードは、Git 2.0のデフォルトになりました。

2
ありがとう、current私が探していたものでした、デフォルトgit pushではfooブランチにそれをブランチにプッシュしorigin/fooます。
ドリアン

@ドリアンありがとう、私currentはデフォルトとしてより理にかなっていることに同意します。
ゾルタン2015

@ Dorian、@Zoltán-私simpleはデフォルトとしてより理にかなっていると感じています。答えを「いつ何を使うか」で更新しました。plsは一見があります。
Karthik Bose、

1
注:gitバージョン2以降、デフォルト値はに変更されましたsimple
Danijel

8

Karthik Boseの回答に加えてマイナーアップデート-すべてのワークスペースに影響を与えるようにgitをグローバルに構成できます。

git config --global push.default upstream

上流は私にとって有効な設定として認識されていなかったため、代わりに「現在」を設定する必要がありました
バッタ

-2

したがって、ローカルブランチfoo、リモートと呼ばれるorigin、およびリモートブランチorigin / masterがあるとします。

fooのコンテンツをorigin / masterにプッシュするには、まずアップストリームを設定する必要があります。

git checkout foo
git branch -u origin/master

次に、次を使用してこのブランチにプッシュできます。

git push origin HEAD:master

最後のコマンドでは、-forceを追加して、origin / masterの履歴全体をfooの履歴に置き換えることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.