私が抱えていた問題は、私の指が自動的にタイプすることgit push origin master
です。代わりに私が作業していてnew-branch
、入力するつもりで、プッシュされていgit push origin new-branch
ない変更がある場合、master
それらは誤ってプッシュされます。現在のブランチとの間でのみプッシュできるように、これを防ぐ方法はありますか?
6 に答える
の設定をgit push
使用して、refspecが指定されていない場合の処理を指定できます。状況に応じて3つのモードがあります。push.default
git-config
、、およびモードは
simple
、他のブランチをプッシュする準備がまだできていない場合でも、作業の終了後に1つのブランチをプッシュしたい場合に使用します。current
upstream
この設定は、refspecが指定されていない場合、つまりgit push
引数なしで実行されている場合にのみ有効になることに注意してください。git push origin master
にプッシュmaster
しorigin
ます。
経験則として、常に個別の作業ブランチを作成し、マスターブランチに中間結果をコミットしないようにする必要があります。git flow
このワークフローを簡素化します。
ドキュメントから:
push.default
git push
コマンドラインでrefspecが指定されておらず、リモートでrefspecが設定されておらず、コマンドラインで指定されたオプションによってrefspecが暗黙指定されていない場合に、実行するアクションを定義します。可能な値は次のとおりです。
nothing
-何も押さないでください。
matching
-両端で同じ名前のすべてのブランチをプッシュします。これは、すべてのブランチを公開可能な形に準備し、1つのコマンドでそれらをプッシュする人向けです。他のユーザーがブランチを更新した場合、ローカルで停止したブランチは非早送りプッシュを試行するため、複数のユーザーが共有するリポジトリにプッシュすることは適切ではありません。+これは現在デフォルトですが、Git2.0はデフォルトをに変更しますsimple
。
upstream
-現在のブランチをそのアップストリームブランチにプッシュします(tracking
これは非推奨の同義語です)。これにより、git push
によってマージされたものと同じリモート参照を更新しgit pull
、push
対称pull
にします。アップストリームブランチを設定する方法については、「branch..merge」を参照してください。
simple
--のようupstream
ですが、アップストリームブランチの名前がローカルブランチの名前と異なる場合、プッシュを拒否します。これは最も安全なオプションであり、初心者に最適です。Git2.0ではデフォルトになります。
current
-現在のブランチを同じ名前のブランチにプッシュします。
gitをバージョン1.7.11以降にアップグレードし、「単純な」push.defaultを使用する必要があります。
o simple - like upstream, but refuses to push if the upstream branch's name is different from the local one. This is the safest option and is
well-suited for beginners. It will become the default in Git 2.0.
これにより、問題を正確に防ぐことができます。Git2.0のデフォルトオプションにもなることに注意してください。次の方法で有効にできます。
git config push.default simple
gitpushcurrent
を指す、たとえば、という名前のエイリアスを作成できますgit push origin $(git branch | grep "*" | sed "s/* //")
。
gitpushcurrent
次に、の代わりに自動的に入力するように指を再トレーニングしますgit push origin master
。したがって、現在のブランチが何であるかを考える必要はありません。
私は数日でGitを使用していますが、ちなみに、次のことができます。
キーボードで入力している内容に注意してください。Gitは強力であり、指で何かを自動的に入力するように十分に訓練されていると、作業中のブランチを削除したり、不要なときにブランチをマージしたりするなど、多くの損害を与える可能性があります。常に注意してください。
コマンドにはエイリアスを使用します。それらは非常に強力で、時間を節約でき、本当に欲しくないものを作るのを防ぎます。
git -g config push.default current
この質問は、「 gitpushコマンドの確認」と非常によく似ています。
そして、ここでも同じ解決策を提案します。
必要なのは、「マスター」のような保護されたブランチへのコミットの事前フックです。
「マスターへのプッシュを防ぐ方法」に関するこのブログはあなたを助けるはずです。
PS:GITバージョン1.8.2以降が必要です。