web-dev-qa-db-ja.com

git fetchがローカルリポジトリを更新しません

私が欲しいもの:

すべてのブランチでローカルリポジトリを使用してサーバーからのすべてのニュースコミットを更新しますが、ブランチをマージしません(履歴行を結合するだけです)

私はこのコマンドを試しています

git fetch --force --progress --verbose  name@Host:/path/to/repository.git 

私はそれがうまくいくと思った:

From Host:/path/to/repository
  * branch            HEAD       -> FETCH_HEAD

しかし、この出力はどういう意味ですか?ログが表示される場合、更新されていません。サーバーからクローンを作成すると、すべての新しいコミットがそこにあります。だから...コマンドは動作しません。次に、サーバーには存在するがローカルリポジトリには存在しないブランチを試します

git fetch --force --progress --verbose  name@Host:/path/to/repository.git my_branch

結果は次のとおりです。

From Host:/path/to/repository
  * branch            my_branch       -> FETCH_HEAD

すべての成功...すべてのブランチがわからず、ブランチが更新されたとしても、この変更を取得してログで確認できます。

それを行うためのアイデアはありますか?

22
Rodrigo

フェッチすると、リモートブランチが取得されますが、リモートブランチからの変更をローカルブランチにマージして、それらの変更を確認する必要があります。

取得した後、これを試してください:

git log Origin/yourbranchname | head
git log yourbranchname | head

違いがわかりますか?

今やる:

git checkout Origin/yourbranchname -b newbranchname
git log newbranchname

Newbranchnameにリモートの変更が表示されるはずです。

これらの変更をブランチにマージすることもできます

git checkout yourbranchname
git merge Origin/yourbranchname
31
George Skoptsov

以前この問題に直面しましたが、主な理由は、gitローカル設定でremote.Origin.fetchを設定しなかったことです。

以下のコマンドを使用して問題を修正します。

git config --local --add remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*

その後、「git fetch Origin」を実行すると、期待どおりの出力が得られると思います。

19
kext

git fetchは、リモートブランチのローカルコピーに変更を加えるだけです。リポジトリまたはローカルブランチを更新する場合は、fetchの後にmergeを続けるか、ワンショットにgit pullを使用する必要があります。

素晴らしいSO answer: https://stackoverflow.com/a/292359/102371

10
John Weldon