0

リモート ブランチ Design0.5 を確認しました。そのブランチの最後のリモート コミットは、ここで (ブランチなし) とマークされている最上位のローカル コミットと同じです。したがって、ローカルでは、Design0.5 は私が望んでいた場所から 5 コミット遅れています。リモート ブランチ remotes/origin/Design0.5 も実際の場所の後ろに表示されます。それは本当に私を困惑させます。ここで本当にやりたいことは、リポジトリへのリモート変更を追跡することだけです。リモートで実際に Design0.5 を追跡している状態にするにはどうすればよいですか? あきらめて別の場所にブランチをチェックアウトすることもできますが、移動する必要のないローカル ディレクトリに追跡されていないバイナリ ファイルがあります。それに頼らずにローカルを修正できれば、git をよりよく理解するのにも役立つかもしれません。

関連するクエリを見てきましたWhy did git set us on (no branch)? そこでさまざまな提案(リベースなど)を試みましたが、成功しませんでした。

私の最後の2つのコマンドは

$ git pull --rebase origin Design0.5

$ git branch -av
* (no branch)              130bef1 Debugging Program.fs note point at which crash occurs
  Design0.3                f7f6179 Updated tests and comments
  Design0.5                578ff32 [behind 5] updated project to include new files
  master                   578ff32 [behind 5] updated project to include new files
  remotes/origin/Design0.1 f7f6179 Updated tests and comments
  remotes/origin/Design0.3 f7f6179 Updated tests and comments
  remotes/origin/Design0.5 f98e08e Added definition of FOO
  remotes/origin/master    578ff32 updated project to include new files

間違いなく、git ブランチがどのように機能するかを正しく理解していません。

4

2 に答える 2

3

Design0.5をリモートで追跡している状態にするにはどうすればよいですか?

リモートブランチ追跡しています。そのため、ローカルブランチの古さに関する情報を入手できます。は[behind 5]、ローカルブランチが、追跡しているブランチ、つまりリモートブランチよりも5コミット遅れていることを示しています。

トラッキングブランチは、リモートブランチの状態に自動的に更新されません。これを行うと、自分のローカルブランチに対するコントロールが削除されます。

では、リモートトラッキングブランチとは何ですか?リモート追跡ブランチは、実際には他のローカルブランチとまったく同じです。これは、リポジトリの履歴内のコミットへの(移動可能な)ポインターです。唯一の違いは、リモート追跡ブランチが追跡するリモートブランチを認識していることです。そして、この追跡は、ローカルブランチがリモートブランチとどのように異なるかに関する情報(背後/前方情報)を取得し、どのリモートからプルまたはプッシュする必要があるかをすばやく知るための単なる「仕掛け」です。それ以外に、追加の魔法はありません。

さて、あなたの状況に戻りましょう。現在、切り離されたHEADを使用しています。なぜあなたがここでその場所にたどり着いたのかを正確に言うのは難しいです。私が想定しているのはpull --rebase、ローカルコミットを書き換えるを開始し、競合が発生したことです。その場合、リベースは一時停止し、競合が解決するのを待ってから、リベースを続行します。ここgit statusでそれを確認するのに役立つはずです。切り離されたHEADで行ったことを保持したくないことがわかっている場合は、ブランチをチェックアウトして通常の状態に戻すことができます。

リモートトラッキングブランチ(または実際には任意のブランチ)を実際に更新するには、それらをチェックアウトして実行しgit merge origin/otherbranch、フェッチされたリモートブランチの状態に更新するか、実行git pullして追跡されたリモートをフェッチし、最新のものを取得する必要があります。引き込まれたバージョン。

于 2013-03-18T18:11:15.680 に答える
1

git pull は「git fetch の後に git merge を実行するのと同じ」と常に教えられてきたため、「commits behind」メッセージは常に私を混乱させていました。現在のブランチに関する限り、これは正しいかもしれませんが、git pull を実行しても、ローカル参照の remotes/origin/your-branch は実際には更新されません。git fetch を実行すると、参照が行に戻るはずです。

于 2013-03-18T18:18:09.817 に答える