1

私はかなり最近 git を使い始めましたが、とても満足しています。間違いなく素晴らしいツールです。

しかし、今日は本当に奇妙な状態に陥っていて、抜け出すことができないようです.

master と pqueues という 2 つのリモート ブランチがあります。それらのブランチを同じ名前のローカルブランチにプルできるようにしたいのですが、そうすると、git pullチェックアウトしたブランチに master をプルしてマージします。git pullローカルの pqueue で行うと、それ自体とマスターのマージが行われます。理由が本当にわかりません。

またgit push origin pqueues、pqueues で行うUpdates were rejected because the tip of your current branch is behindと、そのリモート ブランチにコミットするのは私だけであり、ローカル ブランチはリモート ブランチよりも数コミット進んでいることがわかっている場合に表示されます。

実際に何が起こっているのかを調べて、正常に動作するように戻すにはどうすればよいですか?

4

2 に答える 2

1

プルの結果がマージになる 2 つのケースがあります。1. ローカル ブランチ (たとえば、'master') でコミットを行い、ローカルの 'master' が最後に 'origin/master' と同期してから、他の誰かが 'origin/master' にコミットをプッシュしました。 2 'master' にコミットしていませんが、他の誰かが 'origin/master' を以前のコミットに巻き戻し、そこにコミットを追加して 'rewrite history' を持っています。

ケース (1) の場合、origin/master の新しい HEAD で変更を再生する「git pull --rebase」を実行できる場合

ケース (2) は、履歴を書き換えないことで回避できます。コミットを元に戻す必要がある場合は、git revert を使用します。これにより、前のコミットを元に戻す新しいコミットが追加され、コミットと元に戻すすべてが git に表示され、早送りできます。すべてのダウンストリーム リポジトリによって。

于 2012-09-14T02:21:20.507 に答える
0

注: 使用している git pull (プルgit pull --rebaseされているものの上に現在のブランチを更新することをお勧めします) は、git pull最初に git fetch.

(「git fetch/ git pullGit リファレンスから)」を参照してください。

そしてgit fetch、リモート ブランチをフェッチします。それらがローカル リポジトリに存在しない場合は、それらを作成します。そのため、最初
に次 のように表示されます。 git pull

* [new branch] pqueues -> pqueues/pqueues 
* [new branch] master -> pqueues/master 

しかし、それは最初の 1 回だけですgit pull。他のすべてのものは、既存のリモート追跡を取得して更新します。
Git: トラッキング ブランチとは?」 と 「リモート トラッキング ブランチとリモート ブランチの違いは何git fetchですか?」 を参照して、更新内容をよりよく理解してください。

于 2012-09-14T04:16:58.473 に答える