Gitの利用標準プロセス

伊谢尔伦
伊谢尔伦オリジナル
2016-11-30 10:44:271235ブラウズ

チーム開発では、合理的かつ明確な Git 使用プロセスに従うことが非常に重要です。

そうしないと、全員がまとまりのないコミットを大量に送信することになり、プロジェクトの調整と維持がすぐに困難になってしまいます。

以下はThoughtBotのGit利用仕様のプロセスです。私はそこから多くのことを学びましたので、同じように Git を使用することをお勧めします。

Gitの利用標準プロセス

ステップ 1: 新しいブランチを作成する

まず第一に、新しい機能を開発するたびに、別のブランチを作成する必要があります (これに関しては、「Git ブランチ管理戦略」を参照できます)。

# 获取主干最新代码
$ git checkout master
$ git pull
# 新建一个开发分支myfeature
$ git checkout -b myfeature

ステップ 2: ブランチのコミットを送信する

ブランチが変更されたら、コミットを送信できます。

$ git add --all
$ git status
$ git commit --verbose

git add コマンドの all パラメータは、すべての変更(新規作成、変更、削除を含む)を保存することを意味します。 Git 2.0 以降では、 all が git add のデフォルトのパラメータであるため、代わりに git add を使用することもできます。

変更されたファイルを表示するには git status コマンドを使用します。

git commit コマンドのverboseパラメータは、diff結果をリストします。

ステップ 3: 送信メッセージを作成する

コミットを送信するときは、完全かつ簡潔な送信メッセージを指定する必要があります。以下はサンプルです。

Present-tense summary under 50 characters
* More information about commit (under 72 characters).
* More information about commit (under 72 characters).

最初の行は 50 語以内の要約で、その後の空白行に変更の理由、大きな変更点、注意が必要な問題がリストされます。最後に、対応する URL (バグ チケットなど) を指定します。

ステップ4: トランクと同期する

ブランチの開発プロセス中、常にトランクと同期する必要があります。

$ git fetch origin
$ git rebase origin/master

ステップ 5: コミットをマージする

ブランチの開発が完了すると、多数のコミットが存在する可能性がありますが、トランクにマージするときは、コミットを 1 つだけ (多くても 2 つまたは 3 つ) にしたいことがよくあります。これは明確であるだけでなく、管理も簡単です。

では、複数のコミットをマージするにはどうすればよいでしょうか?これには git rebase コマンドが必要です。

$ git rebase -i origin/master

git rebase コマンドの i パラメータは対話型を示します。このとき、git は次のステップのために対話型インターフェイスを開きます。

以下ではTute Costaの例を使ってコミットをマージする方法を説明します。

git rebase コマンドの i パラメータは対話型を示します。この時点で、git は次のステップのために対話型インターフェイスを開きます。

以下ではTute Costaの例を使ってコミットをマージする方法を説明します。

pick 07c5abd Introduce OpenPGP and teach basic usage
pick de9b1eb Fix PostChecker::Post#urls
pick 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

上記の対話型インターフェイスでは、まず現在のブランチの最新の 4 つのコミットが一覧表示されます (下にあるほど新しいものになります)。各コミットの前に操作コマンドがあります。デフォルトは pick です。これは、この行のコミットが選択されており、リベースする必要があることを意味します。

4 つのコミットの下には、使用できるコマンドをリストした多くのコメントがあります。

pick:正常选中
reword:选中,并且修改提交信息;
edit:选中,rebase时会暂停,允许你修改这个commit(参考这里)
squash:选中,会将当前commit与上一个commit合并
fixup:与squash相同,但不会保存当前commit的提交信息
exec:执行其他shell命令

上記6つのコマンドのうち、squashとfixupはコミットのマージに使用できます。まず、マージする必要があるコミットの前の動詞を squash (または s) に変更します。

pick 07c5abd Introduce OpenPGP and teach basic usage
s de9b1eb Fix PostChecker::Post#urls
s 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend

この変更が実行されると、現在のブランチにはコミットが 2 つだけ残ります。 2 行目と 3 行目のコミットは 1 行目のコミットにマージされます。送信情報には、これら 3 つのコミットの送信情報も含まれます。

# This is a combination of 3 commits.
# The first commit's message is:
Introduce OpenPGP and teach basic usage
# This is the 2nd commit message:
Fix PostChecker::Post#urls
# This is the 3rd commit message:
Hey kids, stop all the highlighting

3行目のsquashコマンドをfixupコマンドに変更すると。

pick 07c5abd Introduce OpenPGP and teach basic usage
s de9b1eb Fix PostChecker::Post#urls
f 3e7ee36 Hey kids, stop all the highlighting
pick fa20af3 git interactive rebase, squash, amend

実行結果は同じですが、2行目と3行目のコミットが1行目のコミットにマージされます。ただし、新規投稿情報では、コミット情報の3行目がコメントアウトされます。

# This is a combination of 3 commits.
# The first commit's message is:
Introduce OpenPGP and teach basic usage
# This is the 2nd commit message:
Fix PostChecker::Post#urls
# This is the 3rd commit message:
# Hey kids, stop all the highlighting

squash コマンドと fixup コマンドは、コミットを自動的にマージするコマンド ライン パラメーターとしても使用できます。

$ git commit --fixup  
$ git rebase -i --autosquash

この使い方については、ここでは説明しませんので、この記事を参照してください。

ステップ 6: リモート倉庫にプッシュする

  合并commit后,就可以推送当前分支到远程仓库了。

$ git push --force origin myfeature

  git push命令要加上force参数,因为rebase以后,分支历史改变了,跟远程分支不一定兼容,有可能要强行推送(参见这里)。

 第七步:发出Pull Request

  提交到远程仓库以后,就可以发出 Pull Request 到master分支,然后请求别人进行代码review,确认可以合并到master。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。