新しい現場に入ってもさくっとGitが使えるように、導入、操作手順を作成しました。
本手順は、以下のことについて記載しています。
- リポジトリ(ソースコード)のダウンロード
- ユーザー名、メールアドレスの設定
- ブランチの作成、切り替え、削除
- 開発用コマンド(add, commit, push)
- プルリクエスト
- masterの最新情報をブランチに適用する(fetch, rebase)
リポジトリ(ソースコード)のダウンロード
git clone <リポジトリURL>
コマンドを使用すると、ローカル環境にリポジトリ(ソースコード)をダウンロードできます。
下記はVue_js_work
リポジトリをローカル端末にダウンロードしています。
コマンドはリポジトリをダウンロードしたいディレクトリで実行します。
$ git clone https://github.com/username/Vue_js_work
Cloning into 'Vue_js_work'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 11 (delta 1), reused 11 (delta 1), pack-reused 0
Receiving objects: 100% (11/11), done.
Resolving deltas: 100% (1/1), done.
ダウンロードが完了したら、ローカル端末のカレントディレクトリに、リポジトリ名のディレクトリが作成されます。
$ ls -l
total 0
drwxr-xr-x 11 username staff 352 2 5 17:37 Vue_js_work
後続作業でgit
コマンドを使用できるようにするため、
作成されたディレクトリにcd
し、.git
がある階層まで移動します。
$ cd Vue_js_work/
$ ls -d .git
.git
ユーザー名、メールアドレスの設定
以下コマンドを実行して自分のユーザー情報を登録します。
git config --global user.name <名前>
git config --global user.email <メールアドレス>
ユーザー名を登録するとGitの各種操作の履歴に名前が表示されるようになります。
ブランチの作成、切り替え、削除
ブランチの作成
以下のいずれかのコマンドでブランチを作成することができます。
# ローカルのソースを元に新規ローカルブランチを作る
$ git branch <新規ブランチ名>
#ローカルにあるブランチを元に新規ローカルブランチを作る
$ git branch <新規ブランチ名> <元にするブランチ名>
#リモートにあるブランチを元に新規ローカルブランチを作る
$ git branch <新規ブランチ名> origin/<元にするブランチ名>
#リモートにあるブランチを元に新規ローカルブランチを作り、ブランチを新規のものに切り替える
$ git checkout -b <新規ブランチ名> origin/<元にするブランチ名>
今回はリモートのmaster
ブランチを元に、ローカルブランチfeature/test_branch_A
を作成します。
$ git checkout -b <新規ブランチ名> origin/<元にするブランチ名>
git branch
コマンドでブランチの一覧を表示することができます。
*
がついてるところが現在のブランチとなります。
$ git branch
master
* feature/test_branch_A
feature/test_branch_A
の作成が確認できたらgit push -u <リモートリポジトリ> <ブランチ名>
で作成したブランチをリモート(web上のgit)に登録します。
git push -u origin feature/test_branch_A
※ -uは --set-upstream でも可
※ <リモートリポジトリ> は基本的にはorigin
となる。
origin
とはリモートリポジトリのアクセス先のことで、Gitがデフォルトでつける名前です。設定内容はgit remote -v
コマンドで確認できます。参考
$ git remote -v
origin https://github.com/username/Vue_js_work (fetch)
origin https://github.com/username/Vue_js_work (push)
ローカルのブランチが追跡しているリモートブランチを確認
git branch -vv
コマンドでローカルブランチがプッシュするリモートブランチが正しいかを確認します。正しければ下記のようにローカルブランチとリモートブランチの名前が一致します。
$ git branch -vv
* feature/test_branch_A 0987c1c [origin/feature/test_branch_A] <コミットメッセージ>
main 0987c1c [origin/main] <コミットメッセージ>
git push -u origin feature/test_branch_A
の実行を忘れると下記のようになり、プッシュ先がmainブランチのままとなってしまいます。
$ git branch -vv
* feature/test_branch_A 0987c1c [origin/main] <コミットメッセージ>
main 0987c1c [origin/main] <コミットメッセージ>
ローカルのブランチが追跡しているリモートブランチの変更
下記コマンドで変更が行えます。
git branch -u origin <リモートブランチ>
ブランチの切り替え
git checkout <ブランチ名>
でブランチの切り替えを行うことができます。
$ git checkout feature/test_branch_A
Switched to branch 'feature/test_branch_A
git branch
コマンドで確認すると、feature/test_branch_A
に切り替わっていることが確認できます。
$ git branch
master
* feature/test_branch_A
ブランチの削除
作成したブランチを削除したくなった場合は、下記のコマンドを実行します。
# 削除するブランチにいると削除が行えないため適当なブランチへ移動
$ git checkout <削除しないブランチ名>
# ローカルのブランチを削除
$ git branch -d <削除するブランチ名>
# リモートのブランチを削除
$ git push --delete origin <削除するブランチ名>
開発作業(ファイル追加)
ファイルを作成して、その内容をリモートブランチに適用します。
ここでは試しに、git_test.txt
ファイルを作成します。
$ touch git_test.txt
$ ls git_test.txt
git_test.txt
ファイルが作成できたら、add
とcommit
を行い、gitに追加したファイルの情報を登録します。
$ git add .
$ git commit -m "コミットメッセージです"
間違えてcommit
してしまった場合はgit git reset --soft HEAD^
で直前のコミットを取り消すことができます。HEAD^
は直前のコミットを意味します。参考
$ git reset --soft HEAD^
続けて、git push
コマンドを実行すると、ローカル環境でコミットしたファイルをリモートのブランチに登録できます。
$ git push
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 245 bytes | 245.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/username/Vue_js_work
ad34a7b..01e5f2b feature/test_branch_A -> feature/test_branch_A
これで、リモートのブランチにgit_test.txt
が登録できました。
プルリクエストする
個別のブランチで作業した内容をmasterブランチに反映するには、プルリクエストを行います。
プルリクエストはGitのサイト画面で行います。
プルリクエストを行うには、まず画面の「Pull request」をクリックします。
遷移した画面で、「New pull request」をクリックします。
①の左側にマージ対象のブランチを、
右側にマージするブランチを設定し、「Create pull request」をクリックします。
「Write」でプルリクに関するメッセージを入力して、「Create pull request」をクリックすれば完了です。
あとは、レビュアーが追加したファイルを確認し、ファイルをmasterブランチにマージします。※マージの方法については割愛
masterの最新情報をブランチに適用する
まずgit fetch
コマンドで、リモートのgitの状態を、ローカルのgitに適用します。(リモートにある他のブランチの更新状態を取得します)
$ git fetch
次にgit rebase origin/<メインブランチ名>
で、今作業しているブランチに対し、メインブランチ名の内容を取り込みます。
ここではmaster
の内容をfeature/test_branch_A
に取り込んでいます。
$ git rebase origin/master
master
ブランチとfeature/test_branch_A
とで、同じファイルの同じ場所が修正されていなければ、コマンドは正常終了し、feature/test_branch_A
が最新化されます。
しかし、そうでない場合はコンフリクトが発生します。
下記の例ではtest_master.txt
の内容がコンフリクトしています。
$ git rebase origin/master
Auto-merging test_master.txt
CONFLICT (content): Merge conflict in test_master.txt
error: could not apply 246d2c2... test
cat
でファイルを確認すると、masterブランチのファイルの方は「test_888」、
feature/test_branch_Aブランチのファイルの方は「test_666」と記載されていることが原因だとわかります。
$ cat test_master.txt
<<<<<<< HEAD
test_888
=======
test_666
>>>>>>> 5e7dbdb (テストコミット3)
vi
でコンフリクト箇所を修正します。
今回はtest_master.txt の内容は「test_888」となっていることが正しいこととします。
$ cat test_master.txt
test_888
次のコマンドを実行すると、masterの最新情報が無事ブランチfeature/test_branch_Aに適用されます。
$ git add test_master.txt
$ git rebase --continue
ただ、今回の修正でローカルとリモートのfeature/test_branch_Aに差分があるとpush時やpull時にコンフリクトします。
$ git push
To https://github.com/username/Vue_js_work
! [rejected] feature/test_branch_A -> feature/test_branch_A (non-fast-forward)
$ cat test_master.txt
<<<<<<< HEAD
test_666
=======
test_888
>>>>>>> 4581bb81b6c23a4f9729101193acdcdd291a749c
コンフリクトした場合は同じようにvi
でコンフリクト箇所を修正します。
test_master.txt の内容は「test_888」となっていることが正しいこととします。
$ cat test_master.txt
test_888
上記のように修正して、次のようにコマンドを実行するとfeature/test_branch_Aにpushが行えるようになります。
$ git add .
$ git commit -m "コンフリクト解消"
$ git push
ブランチの差分比較
以下のコマンドを使用すると、ブランチの変更内容の差分を確認できます。
git diff <ブランチA> <ブランチB>