配属後に新人チームで開発を行う機会があり、その際にGit周りで使用した部分についてまとめた記事です。所属チームでは主にGitLabを利用しているので、ここではGitLabでの例を挙げます。
GitLab連携
まずGitLab上でプロジェクトを作成し、GitLabにSSHでアクセスする場合には、公開鍵を登録しておきます。
参考:SSH認証キーをGitLabに登録・設定手順 覚書
ローカルでまだプロジェクトを作成していない場合
プロジェクトを置きたい場所で以下コマンドを実行し、リポジトリを取得します。
git clone [URL]
既にローカルでプロジェクトを作成している場合
プロジェクトのルートディレクトリで以下コマンドを実行します。
git init # まだGitで管理していない時のみ実行
git remote add [リモート名] [URL]
git push -u [リモート名] [ローカルブランチ名]
これでこのブランチに関しては、次回からpushやpullなどでURLを指定する必要がなくなります。
.gitignoreの用意
Gitで管理したくないファイルを.gitignore
に記述しプロジェクトのルートディレクトリに置いておくことで、管理対象から外すことができます。gitignore.ioを利用すると簡単に作ることができます。
開発前に行う基本的な流れは以上で、あとは必要に応じてCI用の設定ファイルを作成したりします。
開発時の基本的な流れ
コミットしたいファイルをステージングエリアにあげます。
git add [ファイル名]
コミットしたくないファイルがステージングエリアに含まれていないか確認します。
git status
# コミットしたくないものが含まれていた場合はステージングエリアから除去
git restore --staged [ファイル名]
問題なければメッセージをつけてコミットします。
git commit -m 'メッセージ'
リモートリポジトリにあげたいタイミングでリモートリポジトリの変更分を取り込み、コンフリクトが起きなければpushします。
# リモートリポジトリの内容の取り込み
git pull
# または
git fetch
git merge
# リモートリポジトリにローカルリポジトリの内容を反映
git push
基本的にはこれを繰り返して開発を進めていきます。
その他よく使ったコマンド
ブランチ関連
チームの方針にもよるのかもしれませんが、基本的に機能毎・修正点毎などでブランチを分けて作業するので、そのブランチの管理に使ったコマンド達です。
# リモートブランチ含め全てのブランチを表示(-aをつけない場合はローカルブランチのみ)
git branch -a
# 新しいブランチを作成し、そのブランチに切り替える(-cを付けずに既存のブランチ名を指定すると、ブランチの切り替え)
git switch -c [ブランチ名]
# ブランチの削除
git branch -d [ブランチ名]
変更点の確認
ワーキングツリーとステージングエリア、ステージングエリアとコミット内容などの間の変更点を確認できます。
git diff
コミット履歴の確認
オプションを付けることで見た目や表示範囲を変えることができますが、VSCodeを使っている場合には拡張機能を使ったほうが見やすいと思います。私はGit Graphを使っています。
git log
過去のコミット地点に戻る
ここはワーキングツリーやステージングエリアの内容をどうするか、移動先で変更を加えたいのかなどで使い分ける必要があります。
# 過去コミットに移動(--hardはワーキングツリーの内容も消えるため注意)
git reset --hard [ハッシュ]
# 一時的に移動(変更を保存したい場合には新しくブランチを作ることを忘れない)
git switch [ハッシュ]
参考:
- [git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法
- 第19話 detached HEAD 状態って何?ブランチがない状態を解決する方法 【連載】マンガでわかるGit~コマンド編~
作業内容の一時保存
ブランチを切り替える前などに、コミットするほどではないがワーキングツリーの変更を残したい場合に使用します。
# コミットしていない変更を退避
git stash
# 直近のstashを戻す
git stash apply
参考:【git stash】コミットはせずに変更を退避したいとき
pushの取り消し
誤ってpushした場合に行います。pushに-fをつけると問答無用で変更が適用され、他者のコミットを消してしまう可能性があるので、チーム開発の際は行わない方がいいです。
# 履歴が残らない。
git reset [戻したいコミットのハッシュ]
git push -f
# 履歴が残る。
git revert [取り消したコミットのハッシュ]
git push