4

私が使用しているビルド システムでは、通常、フル ビルドを実行する前に、プロジェクト データをローカル リポジトリにコミットする必要があります。これは、頻繁にコミットし、パブリック リポジトリにプッシュする前にリベースするという私の通常の習慣に加えて、通常、リモート ヘッドの上にコミットのスタックがあることを意味します。それらのほとんどは、「s」のようなコミット メッセージを持っています。

ここでの状況は、コミットのリストをリベースするステップの 1 つを自動化することです。特定のファイルに加えたすべての変更をパブリックリポジトリにプッシュするべきではないことを知っています。各コミットを編集して、そのファイルへの変更を個別のコミットに分割する方法を探していました。リベース。

たとえば、オリジンの HEAD の場合、私が一番上に持っているコミットは次のとおりです。

* 6f42745 (HEAD, master-dave) s
* b33bc68 s
* 0b787e8 s
* 3d47e9e s
* ae45dec brought pkg up-to-date with master branch
* dd87ec1 s
* 96fd4ef DD: dave dev
* 422cf73 (origin/master, master) Add missing build scripts.

master..master-dave からのすべてのコミットを反復処理し、./file.txt への変更を抽出して、次のようにします。

* 6f42745 (HEAD, master-dave) s
* ------- DD (changes to file.txt)
* b33bc68 s
* ------- DD (changes to file.txt)
* 0b787e8 s
* ------- DD (changes to file.txt)
* 3d47e9e s
* ae45dec brought pkg up-to-date with master branch
* dd87ec1 s
* 96fd4ef DD: dave dev
* 422cf73 (origin/master, master) Add missing build scripts.

そして最後に、git rebase -i origin/master を実行し、すべての「DD」コミットをまとめて押しつぶし、すべての「s」コミットを「master ブランチで更新された pkg」に入れ、並べ替え、master を更新します。 、原点にプッシュし、最終的には次のようになります。

* ------- (HEAD, master-dave) DD: dave dev
* ------- (origin/master, master) brought pkg up-to-date with master branch
* 422cf73 Add missing build scripts.

答えは git filter-branch にあると確信していますが、その方法がわかりません。


編集:

  • --autosquash は「s」コミットの煩わしさを修正しますが、それは主な問題ではありません。変更を特定のファイルに分割する方法はまだわかりません。これは、それらをつぶすに行う必要があります。
  • smudge/clean フィルターは気の利いたものですが、私はキーワードの置換を行っていません。また、個人のブランチで維持したい変更が、スクリプトを作成するのに十分なほど予測可能になるとは思いません。私は常に公開マスターよりも少なくとも 1 コミット先にいる必要があると思います。
4

1 に答える 1

0

http://technosorcery.net/2010/02/07/fun_with_the_upcoming_1.7_release_of_git_rebase_--interactive_--autosquash.html

これにより、オートスカッシュの方法がわかります。コミットを s でマークする代わりに、!squash でマークします。

すべての DD コミットに対して独自のブランチを維持する必要があるようです。次に、メインブランチとのマージを管理します。

除外したいファイルへの変更が環境設定によるものである場合は、代わりにスマッジ/クリーン スクリプトを参照してください。これにより、関連する変更をそのファイルにコミットし、環境のみの変更を省略することができます。これは通常、開発ごとに異なるデータベース接続文字列です。

こちらをご覧ください: http://progit.org/book/ch7-2.html

于 2011-03-16T19:23:05.723 に答える