web-dev-qa-db-ja.com

新入社員がgit履歴を汚染することなく機能に取り組むことを可能にするGitワークフロー

現在のプロジェクトのいくつかの機能に新入社員が取り組むことを望んでいますが、彼は新入社員であるため、マスターブランチにコミットする前にコードレビューを行いたいと思います。また、コードレビューによって拒否されて履歴に入る彼の変更は望ましくありません。

このための理想的なgitワークフローは何でしょうか? (私はかなり一般的だと思いますか?)

1
Yoga

これは、Gitの履歴をクリーンにするために私が行うことです。より少ないコマンドで同じことを達成するためのより速い方法があるかもしれません。要約すれば:

  • 機能ブランチを作成します。
  • ブランチで作業します。
  • ブランチを確認します。
  • 機能を1つのコミットに押しつぶします(機能の範囲が小さい場合を除いて、これは優れた計画ではないことに注意してください)。
  • 機能をメインブランチにリベースします(線形履歴を確保するため)。
  • 早送りマージを実行します。

さまざまな人々が、コミットを押しつぶすことは悪いことだと主張するでしょう。これは私のために働きます。あなたのために働くことは何でもしなさい。

機能の新しいブランチを開始します。

git checkout -b some_user/some_feature

いくつかのコードを書いてください。

ブランチに変更を追加します。

git add .
git commit -m "I did some stuff."

いくつかのコードを書いてください。

ブランチに変更を追加します。

git add .
git commit -m "I did some more stuff."

変更を確認します。

マスターの更新:

git checkout master
git pull Origin master

機能ブランチに戻ります。

git checkout some_user/some_feature

機能のコミットを1つのコミットに押しつぶします。

git rebase -i HEAD~2

コミットをマスターにリベースして、マージが早送りされるようにします。

git rebase master

マージの競合に対処します。

機能をマスターにマージします。

git checkout master
git merge some_user/some_feature

サーバーにプッシュします。

git Push Origin master

機能ブランチを削除します。

git branch -d some_user/some_feature
2
Ant

現在のプロジェクトのいくつかの機能に新入社員が取り組むことを望んでいますが、彼は新入社員であるため、マスターブランチにコミットする前にコードレビューを行いたいと思います。

git branch コマンドを使用して、個別の機能ブランチ(または、この人が複数の無関係な機能に取り組んでいる場合は複数)を作成します。定期的に マージmasterから機能ブランチに(つまり、機能ブランチに立ったままgit merge masterを実行します)。コードを確認したら、機能ブランチをmasterにマージします(masterの上に立ったままgit merge featureを実行します)。

一部またはすべての場合に、マージの代わりに rebases を使用するように指示する人もいます。リベースはあなたの歴史を直線に変えるので、これは:

A ----> B
 \
  \
   ---> C

...これになります(CはBにリベースされ、C 'を作成します):

A ----> B ----> C'

...これではなく(CがBとマージされ、Dが作成されます):

A ----> B -----> D
 \            /
  \          /
   ---> C ---

リベースされた履歴は読みやすく、(わずかに)読みやすくなります bisect ですが、コードがどのように開発されたかを正確に把握できず、実際に何が起こったのかを推測するのが難しくなる可能性があります。リベースするコミット(この例ではC)がすでに別のリポジトリにプッシュまたはプルされている場合、リベースもより複雑になりますが、マージにはこの問題はありません。最終的には、ユースケースに適した行動方針を自分で決める必要があります。

また、コードレビューによって拒否されて履歴に入る彼の変更は望ましくありません。

ブランチをmasterにマージせずに(git branch -D featureを使用して)削除し、Gitが ガベージコレクション 孤立したコミットを自動的に行うのを待ちます。その後、変更は完全に失われることに注意してください。したがって、このコマンドを実行する前に、変更を保持したくないことを確認してください。

誤って間違ったブランチを削除し、すぐに(またはすぐに)問題に気付いた場合は、それを回復できます reflogから

0
Kevin