現在のプロジェクトのいくつかの機能に新入社員が取り組むことを望んでいますが、彼は新入社員であるため、マスターブランチにコミットする前にコードレビューを行いたいと思います。また、コードレビューによって拒否されて履歴に入る彼の変更は望ましくありません。
このための理想的なgitワークフローは何でしょうか? (私はかなり一般的だと思いますか?)
これは、Gitの履歴をクリーンにするために私が行うことです。より少ないコマンドで同じことを達成するためのより速い方法があるかもしれません。要約すれば:
さまざまな人々が、コミットを押しつぶすことは悪いことだと主張するでしょう。これは私のために働きます。あなたのために働くことは何でもしなさい。
機能の新しいブランチを開始します。
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
現在のプロジェクトのいくつかの機能に新入社員が取り組むことを望んでいますが、彼は新入社員であるため、マスターブランチにコミットする前にコードレビューを行いたいと思います。
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から 。