5

想像してみてください、私にはいくつかのブランチがあります:マスター、a、b、c..。

今、私はマスターブランチと「gitpull」にいます。これにより、すべての変更がリモートサーバーからorigin / master、origin / a、origin / b ...ブランチにフェッチされ、CURRENTブランチ(マスター)がorigin/masterとマージされます。しかし、次にAブランチに切り替えて、リモートで追跡されたブランチからこれらのリモート変更を再度マージします。変更を再度フェッチすることはありません(既にorigin /ブランチにあるため)。

私が追跡する(つまり自動的に)リモートブランチを正確に指定せずにこれを行うためのより簡単な方法はありますか?

4

4 に答える 4

1

ローカルブランチをチェックアウトして、origin/aブランチのローカルコピーからマージするだけでよいと思います。

何かのようなもの:

git checkout a
git merge origin/a
于 2010-10-29T06:16:36.767 に答える
1

このための組み込みコマンドがあるとは思いません。ただし、次のようなことができます。

#!/bin/bash
head=$(git symbolic-ref HEAD) || exit
head=${head#refs/heads/}
merge=$(git config --get branch.$head.merge) || { echo "no tracking branch"; exit 1; }
remote=$(git config --get branch.$head.remote) || remote=origin
git merge $remote/${merge#refs/heads/}

# alternatively, as in Aristotle's answer:
# head=$(git symbolic-ref HEAD) || exit
# upstream=$(git for-each-ref --format='%(upstream:short)' "$head"
# [ -z "$upstream" ] && { echo "no tracking branch"; exit 1; }
# git merge $upstream

私は自分の基地をかなりうまくカバーしたと思います-切り離されたHEAD状態にある場合、または現在のブランチに追跡ブランチがない場合、障害ステータスで終了します。通常のgittransferコマンドと同様に、デフォルトでtooriginになります。(リモートのブランチ以外のもの、つまりrefs / heads / *の形式ではないものを追跡しているブランチで使用しようとすると、何か奇妙なことが起こりますが、それはかなりありそうにないようです。)そうではないようです。実際には多くの時間を節約できますが、そこにあります!

使用する場合は、どこかに保存してエイリアスを作成するか、git-somethingという名前を付けてPATHに配置します。

于 2010-10-29T06:58:00.063 に答える
0

git pullgit fetch+にすぎませんgit merge。このパラメーター--rebaseを使用すると、マージせずにリベースすることもできるため、他のブランチに切り替えてマージ/リベースすることができます。

git checkout a
git merge origin/a

また:

git checkout a
git rebase a

それは他に何もしないので、私はプルの使用をまったくやめました。私はgit fetch定期的に行っているので、他のリポジトリの変更を簡単に追跡でき、git merge/rebase準備ができたらいつでも追跡できます。

于 2010-10-29T06:31:10.857 に答える
0

これにより、すべての追跡ブランチが順番にチェックアウトされ、対応するリモートブランチにマージされます。

git for-each-ref --format='%(refname:short) %(upstream:short)' \
| while read branch upstream ; do
    [ -z "$upstream" ] && continue
    git checkout "$branch"
    git merge "$upstream" || git reset --hard
done

マージに競合がある場合は、マージが巻き戻さgit resetれるため、手動で行う必要があります。

テストされていません。

1つ以上のパターンを渡しgit for-each-refて、特定のブランチまたはそれらの特定のセットに制限することもできます。

于 2010-10-29T08:08:04.383 に答える