3

「フィックスアップ!」、「スカッシュ!」をよく使います。また、「rebase -i」を使用して、プッシュされていない最近の履歴をクリーンアップ、修正、またはいじることができます。インタラクティブなリベースに最も適したコミットを Git が自動的に選択できるようにする方法を見つけて、迅速なインタラクティブなリベースを行うためのエイリアスを定義できるようにしたいと考えています。

そのような場合に最適なコミットは、次のいずれかの最新の祖先になると思います。

  • 他のブランチ (ローカルまたはリモート) に表示されます
  • 親が複数いる
  • 両親がいない

最初の条件は、他の人に影響を与える可能性のあるコミットを書き直さないことを保証します。2つ目は、マージを「介して」リベースしようとしないことを保証しますが、これは私が望んでいることではありません。3 つ目は単なるサニティ チェックです。

問題は、Git を使用してそのコミットを見つけるにはどうすればよいかということです。

4

2 に答える 2

1

探しているものとはまったく異なりますがgit rebase、開始点を指定せずに呼び出すと、リベースが上流のブランチで開始されます。これは、ほとんどの場合、完璧な選択です。これ以上リベースすると、公開された履歴を書き直すことになり、決して良い考えではありません。

于 2012-12-20T17:43:36.410 に答える
0

きれいではありませんが、これが私が思いついたものです。

#! /bin/sh

commit=$(git rev-parse HEAD)

while [ "$(git log --format="%p" -1 $commit | wc -w)" -eq 1 ] \
      && [ "$(git branch --all --contains $commit | wc -l)" -eq 1 ]
do
    commit=$(git rev-parse "$commit^")
done

echo $commit

これを達成するためのよりシンプルで堅牢な方法があると確信していますが、それは私が望むことをしているようです。提案と改善は大歓迎です。wc(たとえば、に依存するのではなく、Git配管だけでこれを行うとよいでしょう。)

于 2013-01-02T17:14:05.260 に答える