Git 入門
1. 基本
以下のサイトで基本的な使用方法を学んでください。
※ 入門編・発展編・プルリクエスト編を学修してください。
サルでもわかるGit入門
2. 練習問題
問題1
-
GitHub に新規リポジトリを作成してください。名前を
git-training
とします。 -
a_work
とb_work
というディレクトリを任意の場所に作成する。(Aさん・Bさんの2名が同じリポジトリで作業すると仮定) -
a_work
配下にgit-training
というディレクトリを作成する。 -
git-training
に移動。 git コマンドを使用しリポジトリを新規作成
する。
※ 以降、a_work/git-training
配下で作業する -
ファイル
README.md
を追加し、コミットする。 -
GitHub のリモートリポジトリをローカルに追加する。※ ヒント:
git remote add origin
-
ローカルの
master
ブランチをリモートブランチに反映し、合わせて上流ブランチに指定する。※ ヒント:git push -u
-
developブランチを作成
する。以降develop
ブランチで作業する。 -
test.txt
ファイルを追加。内容は1行aaabbbaaa
を追加する。 -
text.txt
を コミットする。 -
直前のコミットのコードやコメント修正
する。text.txt
をcccbbbccc
に変更する。 -
develop
をリモートリポジトリに反映する。 -
b_work/git-training
配下で リモートリポジトリ を ローカルに取得する。※ 以降b_work/git-training
で作業する。 -
develop
ブランチに切り替える -
develop
ブランチを元に 新規ブランチtask/new_function
を作成する。 -
test.txt
をaaacccaaa
に変更しコミットする。 -
task/new_function
をリモートリポジトリに反映する。 -
test.txt
に任意の1行を追加し、コミットしプッシュする。 -
もう一度、
test.txt
に任意の1行を追加し、コミットしプッシュする。 -
複数のコミットを一つにまとめたい。今追加した2つのコミットを1つにまとめてリモートリポジトリに反映する。ヒント)rebase
- ここで、rebase する際に reword, fixup, squashなど、それぞれの使い方を学ぶ
- オススメとしては、fixupでコミットを結合しつつ最上部で reword によりコミットメッセージを変更する手法
-
リモートリポジトリに反映する。ただし、ローカルとリモートでコミットの差分ができていているため強制的に反映する。
補足)本来、複数人で作業するブランチの場合、強制的に反映してはいけないが練習なので行う。 -
a_work/git-training
に移動しtest.txt
を修正(aaagggaaa
)してdevelop
をリモートリポジトリへ反映する。 -
b_work/git-training
に移動し、develop
ブランチに切り替える。※ 以降b_work/git-training
で作業 -
リモートの状態をローカルへ反映(
fetch
)しリモートの履歴を取得(pull
)する。 -
develop
ブランチにtask/new_function
をマージする。ただし、マージコミット が必ずできるように merge にオプションをつける。 -
コンフリクトが発生。差分を解決して リモートに反映する。(今回差分については developの内容(HEAD)が不要という扱いで削除する)
問題2
-
a_work/git-training
に移動し、develop
からtask/new_branch1
というブランチを作成する。 -
test2.txt
というファイルを追加し、コミット・プッシュする。 -
b_work/git-training
に移動し、fetch する。※以降b_work/git-training
で作業する -
develop
からtask/new_branch2
というブランチを作成する。 -
先程
a_work/git-training
で追加したコミットを、b_work/git-training
に取り込み、コミットする。※ ヒント: cherry-pick -n -
今コミットした内容をステージに戻す。※ ヒント: reset --soft
-
ステージ上の変更内容を、一時保存する。※ ヒント: stash
-
一時保存した変更内容をステージに戻す。 さらにコミットする。
-
今コミットした内容は不要なので削除する。※ ヒント: reset --hard
-
間違ってコミットを削除してしまったので元に戻す。※ ヒント: reflog
-
最後に
develop
へマージして。タグ
をつける。タグの名称は2019xxxx
の形式で本日の日付とする。
問題3
問題1、問題2を SourceTree
のみで行う。
3. Tips
コマンド | 説明 |
---|---|
git fetch --prune | リモートで削除されたブランチがローカルの origin に残っているとき、ローカルからゴミブランチを消す |
git reset --hard origin/branch_name | 差分の問題で pullできなとき、強制的にリモートをローカルへ反映する |
git rm --cached [削除したいファイル] | ファイルを残してgitの監視対象から外す |
git bisect | どのコミットで問題を混入させてしまったのかを特定する |