25

私は、ソースコード管理にgitを使用する小さなチームと協力しています。最近、トピックブランチを実行して機能を追跡し、それらをローカルでマスターにマージしてから、リモートサーバー上の中央のgitリポジトリにプッシュしています。これは、マスターに変更が加えられていない場合にうまく機能します。トピックブランチを作成し、コミットし、マスターにマージしてから、プッシュします。やったー。

ただし、誰かが私より前にオリジンにプッシュした場合、私のコミットは早送りされません。したがって、マージコミットが発生します。これは、トピックブランチをローカルでマスターとマージして、現在のコードで変更が機能するようにする必要がある場合にも発生します。そのため、どこでもマージコミットが行われ、フレンドシップブレスレットに匹敵するgitログが作成されます。

したがって、リベースは当然の選択です。私がしたいのは:

  • 複数のコミットを保持するトピックブランチを作成する
  • マスターとプルをチェックアウトします(マスターにコミットしていないため、早送りします)
  • トピックブランチをマスターの新しいヘッドにリベースします
  • マスターに対してトピックをリベースし(トピックはマスターヘッドから開始します)、マスターをトピックヘッドに移動します

現在これを行う私の方法は以下のとおりです。

git checkout master
git rebase master topic_1
git rebase topic_1 topic_2
git checkout master
git rebase topic_2
git branch -d topic_1 topic_2

これを行うためのより速い方法はありますか?

4

4 に答える 4

45

あなたは知っていgit pull --rebaseますか?プルするときにマージするのではなくリベースし、マージコミットが履歴を汚染するのを防ぎます。

branch.<name>.rebaseおよびbranch.autosetuprebaseconfigオプションを使用して、ブランチのデフォルトの動作として設定することもできます。

于 2010-12-17T20:28:34.217 に答える
12

時間の経過とともに、私のお気に入りの解決策は次のとおりです。

git checkout topic
# make [n] commits
git rebase -i HEAD~[n] #clean up time
git checkout master
git pull --rebase
git checkout topic
git rebase master
git checkout master
git merge topic
git push origin
于 2010-12-18T05:57:42.040 に答える
3

私たちのチームでは、非常にうまく機能し、リベースをまったく使用しないものを設定しました。

作業にかかる時間はそれほど長くなく、通常は1〜2日の労力で、作業をJiraチケットにカットします。各開発者はチケットごとにブランチを作成し、このブランチで動作します。共有する準備ができると、これは中央サーバーにプッシュされます。

中央サーバーは、変更をプルし、更新されたすべてのブランチをマージし、ソフトウェアを再構築し、テストを実行し、すべてを中央マスターgitリポジトリにプッシュするhudsonCIサーバーによって監視されます。

そこから、リポジトリに戻します。私たちは定期的に(つまり、2、3日ごとに)作業ブランチを中央マスターとマージして、それらを「近く」に保ちます。

誰も「マージ」マシンで作業しておらず、CIサーバー以外の誰もマスターにアクセスしていないため、マージの問題が発生することはめったにありません(コミットの約1〜2%)。そして、これらはワークスペースをクリーンアップすることでビルドサーバー上ですばやく解決されます。ブランチを短くし、プッシュする前にリモートマスターとマージすることで、これらのほとんどを回避できたはずです。

また、マージはリベースよりもはるかに堅牢であり、手直しが大幅に少なくて済むことも気に入っています。

于 2010-05-26T23:25:32.930 に答える
2

最新のマスターに対してリベースすることもできます

git checkout topic_1
git rebase refs/remotes/origin/master

これにより、プルの必要がなくなります(少なくとも機能ブランチのEOLまで)。私たちのプロセスはGitHubプルリクエストを使用しているので、ローカルでそれを行う必要はありません。

于 2013-11-11T14:38:59.760 に答える