9

私が抱えていた問題は、私の指が自動的にタイプすることgit push origin masterです。代わりに私が作業していてnew-branch、入力するつもりで、プッシュされていgit push origin new-branchない変更がある場合、masterそれらは誤ってプッシュされます。現在のブランチとの間でのみプッシュできるように、これを防ぐ方法はありますか?

4

6 に答える 6

18

の設定をgit push使用して、refspecが指定されていない場合の処理​​を指定できます。状況に応じて3つのモードがあります。push.defaultgit-config

、、およびモードはsimple、他のブランチをプッシュする準備がまだできていない場合でも、作業の終了後に1つのブランチをプッシュしたい場合に使用します。currentupstream

この設定は、refspecが指定されていない場合、つまりgit push引数なしで実行されている場合にのみ有効になることに注意してください。git push origin masterにプッシュmasteroriginます。

経験則として、常に個別の作業ブランチを作成し、マスターブランチに中間結果をコミットしないようにする必要があります。git flowこのワークフローを簡素化します。

ドキュメントから:

push.default

git pushコマンドラインでrefspecが指定されておらず、リモートでrefspecが設定されておらず、コマンドラインで指定されたオプションによってrefspecが暗黙指定されていない場合に、実行するアクションを定義します。可能な値は次のとおりです。

  • nothing-何も押さないでください。

  • matching-両端で同じ名前のすべてのブランチをプッシュします。これは、すべてのブランチを公開可能な形に準備し、1つのコマンドでそれらをプッシュする人向けです。他のユーザーがブランチを更新した場合、ローカルで停止したブランチは非早送りプッシュを試行するため、複数のユーザーが共有するリポジトリにプッシュすることは適切ではありません。+これは現在デフォルトですが、Git2.0はデフォルトをに変更しますsimple

  • upstream-現在のブランチをそのアップストリームブランチにプッシュします(trackingこれは非推奨の同義語です)。これにより、git pushによってマージされたものと同じリモート参照を更新しgit pullpush対称pullにします。アップストリームブランチを設定する方法については、「branch..merge」を参照してください。

  • simple--のようupstreamですが、アップストリームブランチの名前がローカルブランチの名前と異なる場合、プッシュを拒否します。これは最も安全なオプションであり、初心者に最適です。Git2.0ではデフォルトになります。

  • current-現在のブランチを同じ名前のブランチにプッシュします。

于 2012-08-17T10:22:49.287 に答える
9

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
于 2012-08-17T12:31:24.617 に答える
5

gitpushcurrentを指す、たとえば、という名前のエイリアスを作成できますgit push origin $(git branch | grep "*" | sed "s/* //")

gitpushcurrent次に、の代わりに自動的に入力するように指を再トレーニングしますgit push origin master。したがって、現在のブランチが何であるかを考える必要はありません。

于 2012-08-17T10:18:59.793 に答える
1

私は数日でGitを使用していますが、ちなみに、次のことができます。

  1. キーボードで入力している内容に注意してください。Gitは強力であり、指で何かを自動的に入力するように十分に訓練されていると、作業中のブランチを削除したり、不要なときにブランチをマージしたりするなど、多くの損害を与える可能性があります。常に注意してください。

  2. コマンドにはエイリアスを使用します。それらは非常に強力で、時間を節約でき、本当に欲しくないものを作るのを防ぎます。

  3. このSOの質問やServerFaultのこの質問など、いくつかの興味深く有用なトピックを読んでください。

于 2012-08-17T10:42:17.703 に答える
0

git -g config push.default current

于 2014-03-21T19:06:31.720 に答える
0

この質問は、「 gitpushコマンドの確認」と非常によく似ています。

そして、ここでも同じ解決策を提案します。

必要なのは、「マスター」のような保護されたブランチへのコミットの事前フックです。

「マスターへのプッシュを防ぐ方法」に関するこのブログはあなたを助けるはずです。

PS:GITバージョン1.8.2以降が必要です。

于 2014-10-02T20:02:21.883 に答える