2

したがって、これが私の問題の原因であるかどうかはわかりませんが、誤って次のようにしました。

git push -u origin master

それ以外の:

git push -u origin facebook

私がfacebook支店にいたとき。それは次のように答えました。

Branch master set up to track remote branch master from origin.

プッシュしようとすると:

To git@git.url.com:url.git
 ! [rejected]        facebook -> facebook (non-fast-forward)
error: failed to push some refs to 'git@git.url.com:url.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

私も引っ張ることができません:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.facebook.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "facebook"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.
4

3 に答える 3

2

これは、プッシュしようとして、Git の最新バージョンと競合するファイルに変更を加えた場合です。

これを試して:

git pull origin facebook

エラーがある場合:

git merge
git commit -a -m 'message'
git push origin facebook
于 2013-09-21T00:09:52.190 に答える
0

2 つの問題を修正する必要があります

1.) アップストリーム リポジトリの「master」ブランチにプッシュした誤った「facebook」コミットを元に戻します。

これを行う最も簡単な方法は、アップストリームからレポをもう一度新しいディレクトリに複製することです。たとえば gitk を使用して、マスター ブランチの間違ったコミットを確認し、それらを元に戻してプッシュします。レポ内の間違ったものが修正されたので、同僚は満足しています。

あなたとあなたの同僚全員があなたがしていることを完全に理解していない限り、push -f を使用しないでください。データが失われる可能性があります。元に戻すことは見苦しく見えるかもしれませんが、最初の試みで失敗しても安全です。

2.) ブランチが混乱しないように、独自のレポを修正します。最も簡単なのは、実際には古いレポを忘れて、新しいクローンを続行することです。ただし、上流にプッシュされていない重要な隠し場所やその他のブランチがある場合は、古いリポジトリのセットアップを修復する必要があります。最も簡単なのは、.git/config を直接編集することです。どのように見えるべきかわからない場合は、サンプルなどの事故のないクリーンなレポを用意してください。

個人的にgit fetchgit pull. 失敗はありえないと思いgit fetchます。Git pull は 1 つのコマンドでフェッチとマージを行いますが、場合によっては 1 つを 1 つにする方が良い場合もあります。リモート ブランチ remotes/origin/branchname には、最後のフェッチ時にリモート リポジトリにあったものの正確なスナップショットがあります。それらは読み取り専用であるため、決して台無しにすることはできません。(それらはリモートと呼ばれますが、リモートに保存されていないため、誤解されることがよくあります) ローカル ブランチは読み書き可能です。1 つが台無しになった場合は、それを削除して、もう一度確認することもできます。Git は、リモート ブランチから新しいローカル ブランチを作成します。(もちろん、プッシュされたことのない重要なコミットが含まれているブランチを削除したくない場合)

完全に理解していないレポジトリに対してトリッキーな操作を行う前に、特にプッシュされたことのないものがある場合は、バックアップを取っておくことをお勧めします。

私自身はgit push(引数なしで)使用するだけなので、そのような混乱は起こりません。(初めて新しいブランチをプッシュする場合を除きます。)さらに、常にgit fetch代わりに使用するだけなgit pullので、常に成功し、他の人が何をしたかを確認できます。(ただし、ローカルブランチを維持する場合は、変更されたリモートブランチをマージする必要があります。同様の混乱が発生する可能性がありますが、それでもローカルのみであり、他の人を邪魔することなく削除できます)

追加: Git Pull が Git Fetch を行わないで受け入れられた回答は、プッシュ/フェッチ/プルとそれらを使用する (しない) 方法についての詳細を提供します。

于 2013-09-21T18:18:49.440 に答える