はじめに
本記事では、私のようなGit初心者を対象に
① よく使うGitコマンドの一覧
② Gitの一連の操作フロー
をまとめています。
【初心者向け】Gitコマンドまとめ&実践フロー(init〜mergeまで)
はじめに
本記事では、Gitをこれから実務で使う人向けに、
① Gitの基礎理解(概要・利点・用語)
② よく使うGitコマンド一覧
③ 実際の開発フロー(init〜merge)
をセットで解説します。
0. Gitとは?
Gitとは、ファイルの変更履歴を管理するための分散型バージョン管理システムです。
ソースコードの変更を記録し、「いつ・誰が・何を変更したか」を追跡できます。
*GitとGithubの違い
GitとGithubは相互に連携して活用されるため混同されがちですが、一応違いはあります。
Git
- ファイルの変更をインテリジェントに追跡するバージョンコントロールシステム
- ユーザーとグループが同じファイルに同時に変更を加えようとする場合に特に便利
Github
- リポジトリ(開発物)の管理・変更を行うクラウドベースのプラットフォーム
- 作業の紹介や共有
- 時間の経過に伴うコードの変更の追跡および管理
- 他のユーザーにコードのレビューをしてもらい、それを改善するための提案を得ることが可能
参考
Gitの利点
① 変更履歴をすべて管理できる
- 過去の状態に戻せる
- 変更差分を確認できる
- 「誰がどのような操作を行なった」か明らか(=責任の明確化)
② 並行開発ができる
- 機能ごとに開発を分離
- 安全に試行錯誤できる
③ チーム開発に強い
- 複数人で同時に作業可能
- 変更の統合(merge)が可能
④ 失敗してもやり直せる
- reset / revert により復元可能
- 実験的な変更も安心
Git特有の用語解説
個人的にGitを勉強する過程で苦労したポイントだったので、まとめてみました。
| 用語 | 意味 |
|---|---|
| リポジトリ(repository) | ファイルと変更履歴を管理する場所 |
| ローカルリポジトリ | 自分のPC上のGit管理領域 |
| リモートリポジトリ | GitHubなどの共有リポジトリ |
| ワーキングツリー(作業ディレクトリ) | 実際に作業しているファイル群 |
| ステージングエリア | コミット前の変更を一時保存する場所 |
| コミット(commit) | 変更を履歴として記録すること |
| ブランチ(branch) | 開発の分岐(並行作業用の環境を作成) |
| マージ(merge) | ブランチを統合すること |
| push | ローカルの変更をリモートに送信 |
| pull | リモートの変更を取得して反映 |
| fetch | リモートの変更を取得 |
| clone | リモートリポジトリをコピー |
| HEAD | 現在の作業位置(最新のコミット) |
1. Gitコマンド一覧(基本編)
| コマンド | コマンドの概要 |
|---|---|
| git init | Gitリポジトリを新規作成する |
| git clone | リモートリポジトリをローカルにコピーする |
| git status | 現在の変更状態を確認する |
| git add | 変更をステージングエリアに追加する |
| git commit | 変更を履歴として記録する |
| git log | コミット履歴を確認する |
| git diff | 変更差分を確認する |
| git branch | ブランチの一覧・作成・削除 |
| git checkout | ブランチ切り替え/ファイル復元 |
| git merge | ブランチを統合する |
| git remote | リモートリポジトリを管理する |
| git push | ローカルの変更をリモートに送信 |
| git pull | リモートの変更を取得して統合 |
| git fetch | リモートの変更を取得 |
| git reset | ステージや履歴を戻す |
| git revert | コミットを打ち消す新規コミットを作成 |
| git stash | 作業中の変更を一時退避 |
2. Git操作フロー(initからmergeまで)
ここでは、リポジトリの作成〜分岐ブランチのマージまでの一連のステップを解説しています。
イメージ
STEP1:リポジトリ作成
mkdir git-test
cd git-test
git init
*必要に応じてユーザ名・ユーザーのメールアドレス情報を登録すると、「誰が何の操作をしたか」がわかりやすくなります
git config --global user.name XXX
git config --global user.email XXX
STEP2:ファイル作成と初回コミット
echo "Hello Git" > hello.txt
git status
git add hello.txt
git commit -m "初回コミット"
STEP3:変更の確認と履歴管理
echo "2行目追加" >> hello.txt
git diff # 差分確認
git add hello.txt # 変更内容をステージングエリアに登録
git commit -m "2行目を追加" # addされた変更内容をローカルリポジトリに保存
git log # 履歴確認
STEP4:ブランチを切って開発
git branch feature # 新たにfeatureブランチを作成
git checkout feature # featureブランチに移る
もしくは
git checkout -b feature
変更を加える:
echo "featureブランチで編集" >> hello.txt
git add hello.txt
git commit -m "feature機能追加"
STEP5:mainブランチに戻る
git checkout main
STEP6:ブランチをマージ
git merge feature # feature → mainの方向に注意
これで "feature"ブランチの内容が、"main"ブランチに反映される
STEP7:リモートに反映
git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git branch -M main
git push origin main
3. よくあるミスと対処
① addし忘れた
git status
赤文字はまだコミット対象外
② 間違ったファイルをaddしてしまった
git reset ファイル名
③ コミットを取り消したい
git revert HEAD
④ 作業を一時退避
git stash
git stash pop
⑤pushできない
これは私が実際に体験したミスなので、すこし詳細に記述しています。
症状
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'github.com:User/XXX.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
のような記述がターミナル上で確認される
原因
リモートリポジトリとローカルリポジトリの不整合
# ローカル(main)のDをリモートリポジトリにpushしたい
リモート(main): A --- B --- C(featureマージ済)
ローカル(main): A --- B --- D(ローカル編集)
mainブランチの内容が分岐しているため、「ローカル→リモート」のpushを行おうとするとrejectされる
→ どのブランチで作業しているか・リモート/ローカルでどちらが進んだリポジトリかに注意
対策
git pull origin main --rebase # リモートの変更を取得し、今のコミットをその上に積み直す
git push origin main
4. まとめ
私自身Git経験に乏しい学生ですが、今回ハンズオンでGitを簡単に学ぶ中で
- add → commit の流れで履歴を確実に残す
- branchで環境を分離する
の2点がGitの強みだと感じました。
何かのお役に立てれば幸いです。
