4

Git バージョン: 1.7.12.3

質問が述べているように、それは私には本当に悪い考えのようです。追加のフラグや確認がない場合、git push -fすべての追跡ブランチが強制的にリモートにプッシュされます。

開発者がリモートを追跡している古いブランチをいくつか持っていて、そのコマンドを実行すると、すべての追跡ブランチが古いコピーにロールバックされ、貴重な作業が失われます。

これは偶然に行ったり、git の経験があまりない人が行ったりする可能性があります。このような危険なケースでは、git がもう少し手を取り合って、追加のフラグを要求するか、確認を求める必要があるようです。

これに対する救済策はありますか?

4

3 に答える 3

8

現在は 2016 年 1 月なので、この質問に更新された情報を追加する価値があると思います。

  1. Hobbs が言ったように、現在または変更されたすべてのブランチをプッシュするという点で、通常とまったく同じgit push --forceように動作します。git push
  2. git pushのこの構成に依存するすべてのブランチまたは単一のブランチのいずれかをプッシュしますpush.default
  3. 詳細はこの投稿に記載されていますが、現在のブランチのみをプッシュするには、.gitconfig次のようにする必要があります。
    [ユーザー]
            名前 = ユーザー名
            メール = example.mail@gmail.com
    [押す]
            デフォルト = シンプル

  1. あなたのことを見るためには.gitconfigUnix-like OSただ行うだけですcat ~/.gitconfig。この投稿では、Windows でこれを行う方法を示します。
  2. 現在のブランチのみをプッシュする (simpleモード) は、Git 2.0(でリリース2014-12-17) でのみデフォルトになります。
  3. Git を使用して1.7いる人 (または から更新した人1.7) は、matchingデフォルト モードとして mode を持っています (すべてのブランチをプッシュします)。
于 2016-01-21T15:25:02.927 に答える
3

前述のように、git push のデフォルトの動作は、名前が一致するすべてのブランチをリモートにプッシュすることです。

ドキュメンテーションが -f/--force について述べているように:

通常、コマンドは、上書きに使用されたローカル ref の先祖ではないリモート ref の更新を拒否します。このフラグはチェックを無効にします。これにより、リモート リポジトリがコミットを失う可能性があります。注意して使用してください。

したがって、-f 動作に追加のチェックを追加することは、「ファイルを削除してもよろしいですか?」と尋ねるようなものです。そして「本当によろしいですか?」

git push のデフォルトの動作は、git の将来のメジャー バージョン (1.9 または 2.0) で変更されますが、1.8 では変更されず、作業中のブランチのみをプッシュするようになります。そうなるまでは、次のオプションを設定できます。

git config remote.origin.push HEAD

しかし、 -f を使用していて、古いブランチにいる場合でも、心配はまだ存在します。

于 2012-10-17T17:40:09.903 に答える
2

何をするgit push -fgit pushは、-f. また、git pushブランチ引数がない場合は、一致するすべてのブランチをプッシュするようにデフォルトで設定されているためです。デフォルトのプッシュ動作を行うgit config push.default upstreamgit config push.default simple、変更する必要があります (git help configこれが何をするかについての詳細は、を参照してください)。

于 2012-10-17T14:53:52.433 に答える