1

私は多くの開発者がいるいくつかのプロジェクトでgitを使用しています。私の通常のワークフローは、特定の機能/リクエストのためにローカルでブランチし、早送りマージとしてアップストリームで追跡されるローカルブランチに変更をマージし、変更をプッシュすることです。私は常に1つのコミットでも分岐します。他の人と共有しているブランチでローカルにコミットすることはないので、変更をアップストリームにプッシュするまで、ローカルでリベース/マックすることができます。好みの問題として、可能な限り、マージを早送りコミットにするのが好きです。origin/v1例として、プロジェクトのバージョン1のすべてが、ブランチ上のすべての開発者によってプッシュされた場合、次のようになります。

git checkout v1
git checkout -b feature-A
#Do work on feature-A branch.  Test, rebase --interactive to clean up

v1最終的には、変更をローカルにマージしてにプッシュしたいところですorigin/v1。チェックアウトしてやりgit fetch originます。feature-A変更があった場合は、チェックアウトv1してマージします

git fetch origin
#If New changes are present checkout v1 and merge
git checkout v1
git merge origin/v1 #I could pull but I prefer to fetch, log origin/v1, and then merge

feature-Aここで、チェックアウトfeature-A、リベースv1、チェックアウトv1、マージfeature-A、およびプッシュv1バックの早送りマージを実現しoriginます。

git checkout feature-A
git rebase v1
git checkout v1
git merge --ff-only feature-A
git push origin v1

非早送りコミットには何も問題はなく、マージコミットにも問題はありません。繰り返しますが、それは好みの問題です。ブランチのすべてのチェックアウトを実行せずに同じことを達成するためのより良いワークフローがあるかどうか疑問に思います。更新されたブランチfeature-Aの上にリベースした後、それが機能することに気付いていないgitコマンドがあるかもしれません。v1

https://stackoverflow.com/a/4157106/620304それが役立つようです。考えられるワークフローはv1、元の場所からの最新の変更で更新し、リベース後にローカルv1のHEADに更新することです。feature-A

#Starting from feature-A currently checked out
git fetch origin
#New changes are present
git checkout v1
git merge origin/v1
git checkout feature-A
#In I didn't fetch anything from origin's v1 branch I can skip the commands between the comments
git rebase v1
git branch -f v1 feature-A
git push origin v1

もっと良い方法があるかもしれないと確信しています。ヘルプ/入力は大歓迎です。

4

1 に答える 1

4

早送りマージのみを使用するワークフローは、基本的にリベースワークフローです。git rebase origin/v1一般的なリベースワークフローは、マージする代わりに、提供した例と非常によく似ています。

私が見た中で最も参照されている記事は、Randy Fayのブログ投稿:Gitのリベースワークフローです

使いやすくするためのショートカットについては、この記事の冒頭にリンクされているフォローアップ記事を必ずお読みください。

于 2013-02-26T20:10:35.597 に答える