4

チームの 1 つで、git を使用しているときに、「git push が拒否されました: エラー: 一部の参照をプッシュできませんでした」というエラーが何度も発生します。

git@git.far-mteria.org:ledy/thakres.git へ![拒否]
b_stable -> b_stable (非早送り) エラー: 一部の参照を 'git@git.far-mteria.org:ledy/thakres.git' にプッシュできませんでした転送更新が拒否されました 再度プッシュする前に、リモートの変更 (「git pull」など) をマージしてください。詳細については、「git push --help」の「早送りに関する注意」セクションを参照してください。

もちろん、"-f" を続けて、簡単で汚い (実際にはそうではない) 解決策として使用できます。

ただし、これがどこから来たのか、またはこの拒否の理由は何かを知りたい.

拒否している理由、おそらく競合を引き起こしているファイルについて、詳細な詳細をgitで提供できませんか?

.gitignore に容疑者がいて、別のプロジェクトで同様の問題を引き起こしていました。

4

3 に答える 3

1

git pull を実行してから、プッシュを試みてください。それがメッセージの内容です。

于 2013-11-09T01:21:03.637 に答える
1

Git は個々のファイルを一度に 1 つずつプッシュするのではなく、完全なコミット ツリーをプッシュします。たとえば、「プロジェクト全体が 1 つのコミットでどのように見え、次に別のコミットでそのように見え、最終的にはこのようになるか」のようになります。 .

コミットのグラフとして描かれると、これは例えば非常に直線的です:

...--D--E--F--G    <-- master

「拒否」されているのは、あなたが提供している「最終的に」が、リモートが以前に持っていた「最終的に」からの「前進」ではないということです。つまり、他の誰かが入れた「前進」が欠けているということです。 :

...--D             <-- master

そして、コミット、、、およびを追加EFましGた。しかし、あなたがそうしている間に、他の誰かが で終わる一連のコミットを拾い上げ、D自分の commit を追加しましたH:

...--D--H          <-- master

あなたは破棄して、コミット シーケンスを自分のシーケンスHのように見せることを提案しています。DEG

Git は、破棄することを提案している進行状況を持つブランチ名master(この場合は. git fetchおそらくgit mergeマージコミットを作成して、進行状況を保持し、それを保持するのはあなた次第ですM:

       H------
      /       \
...--D         M   <-- master
      \       /
       E--F--G

または、一連のコミットをH:

...--D--H-E'-F'-G' <-- master

(ここでE'、 、F'、およびは、「 、、および でG'変更されたもの 」のバージョンであり、代わりにそれらを適用するのに十分な変更が加えられています。多くの場合、それは親子関係をコミットするだけであり、場合によってはもう少し作業が必要になります)。EFGH

于 2013-11-08T22:42:29.150 に答える
0

これは、ディスクが同期されていないか、過負荷で、iowait が高い場合に、私が何度か経験した見つけにくい問題です。

あいまいなブランチ名について心配していgit show-branch --list --allます:「警告: refname xyz があいまいです」?

もしそうなら、試してみてください

$ rm -rf .git/refs/heads/origin/xyz

$ git branch --set-upstream lkgr origin/xyz

于 2013-11-10T18:42:47.927 に答える