2

ブランチを親にマージするエイリアスを作成する方法はありますか? 私はできることを知っています:

git checkout - && git merge -

ただし、前のブランチが親ブランチである単純なケースでのみ機能します。私の知る限り、そこにはブランチがないため、git はこの種の情報を追跡しません。しかし、プラグインまたはフックセットとして既に実装されていることを願っています。
前もって感謝します。

4

2 に答える 2

1

このようなエイリアスでは、最初に「親」ブランチを見つける必要があります。

それは些細なことではなく、「ブランチの親ブランチを見つける」という質問にはいくつかの良い解決策があります。

Git の履歴は、コミットのDAGに基づいています。ブランチ (および一般的な「参照」) は、成長を続けるコミット DAG 内の特定のコミットを指す一時的なラベルにすぎません。
そのため、ブランチ間の関係は時間の経過とともに変化する可能性がありますが、コミット間の関係は変化しません

親ブランチの名前を取得したら、それをエイリアスで使用できます。

于 2014-06-25T09:11:59.507 に答える
1

VonC が最初に言ったように、現在のブランチの親を見つける必要があります。次のスクリプトは、主に必要なことを行います。

git branch | grep -v '*'|xargs -I{} sh -c ' printf "{}:"; git log --oneline `git merge-base "$(git rev-parse --abbrev-ref HEAD)" "{}"` | wc -l' | sort -t: -k +2n | tail -n 1 | sed 's/:.*//' 

機能:

  • 各ブランチについて、現在のブランチとのマージベースを検索します
  • 対数の長さを最大化する branch:log-length のペアを検索します
  • ブランチ名を抽出します

その後、チェックアウトして前のヘッドをマージするだけです。

git checkout $parent_branch && git merge -

PS: 大規模なリポジトリではテストしていませんが、現在のブランチのブランチが存在する場合、驚くほど動作する可能性があります。修正する必要があります。

于 2014-06-26T07:43:04.840 に答える