2022.02.05   2022.02.06

【Git】導入と基本的な使い方(ソースコードのダウンロードからプルリクまで)

Git    

新しい現場に入ってもさくっと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

ファイルが作成できたら、addcommitを行い、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>
コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信