リベースは、コミット履歴を整理するための強力な機能です。ブランチの基点を変更したり、コミット履歴を綺麗に保つことができます。
例題1:feature ブランチを main の最新状態にリベース
# 準備
git checkout main
echo "メインの更新" >> main.txt
git add main.txt
git commit -m "メインブランチを更新"
# featureブランチで作業
git checkout -b feature-rebase
echo "新機能" > feature.txt
git add feature.txt
git commit -m "新機能を追加"
# mainの最新にリベース
git rebase main例題2:コミット履歴を整理
# 複数のコミットを作成
echo "作業1" > work1.txt
git add work1.txt
git commit -m "WIP: 作業1"
echo "作業2" > work2.txt
git add work2.txt
git commit -m "WIP: 作業2"
echo "作業3" > work3.txt
git add work3.txt
git commit -m "WIP: 作業3"
# 直近3つのコミットを整理
git rebase -i HEAD~3例題3:コミットメッセージの編集
# インタラクティブリベースでrewordを使用
git rebase -i HEAD~2
# エディタでpickをrewordに変更例題4:コミットの結合(squash)
# 複数の細かいコミットを1つにまとめる
git rebase -i HEAD~3
# エディタで2番目と3番目のpickをsquashに変更例題5:リベース中のコンフリクトを解決
# コンフリクトが発生した場合
git status
# ファイルを編集してコンフリクトを解決
git add resolved-file.txt
git rebase --continue
# リベースを中止したい場合
# git rebase --abortスタッシュは、作業中の変更を一時的に保存する機能です。
例題6:現在の変更をスタッシュ
# 作業中の変更
echo "未完成の作業" > incomplete.txt
git add incomplete.txt
# スタッシュに保存
git stash例題7:スタッシュにメッセージを付けて保存
echo "別の未完成作業" > another.txt
git stash push -m "ログイン機能の途中"例題8:スタッシュの一覧を表示
git stash list例題9:スタッシュの内容を確認
git stash show
git stash show -p # 詳細な差分を表示例題10:特定のスタッシュの内容を確認
git stash show stash@{1}例題11:最新のスタッシュを適用
git stash pop # 適用して削除
# または
git stash apply # 適用するが削除しない例題12:特定のスタッシュを適用
git stash apply stash@{1}例題13:スタッシュを削除
git stash drop stash@{0} # 特定のスタッシュを削除
git stash clear # すべてのスタッシュを削除タグは、特定のコミットに名前を付ける機能です。リリースバージョンの管理によく使われます。
例題14:軽量タグを作成
git tag v1.0.0例題15:特定のコミットにタグを付ける
git tag v0.9.0 abc1234 # abc1234はコミットID例題16:注釈付きタグを作成
git tag -a v2.0.0 -m "メジャーリリース版"例題17:タグの情報を表示
git show v2.0.0例題18:タグの一覧を表示
git tag
git tag -l "v1.*" # パターンマッチング例題19:タグを削除
git tag -d v1.0.0例題20:リモートのタグを削除
git push origin --delete v1.0.0.gitignoreファイルを使って、Gitで管理したくないファイルを指定できます。
例題21:.gitignoreファイルを作成
cat > .gitignore << EOF
# ビルド成果物
build/
dist/
*.exe
# 依存関係
node_modules/
vendor/
# 環境設定
.env
.env.local
# IDE設定
.vscode/
.idea/
*.swp
# OS関連
.DS_Store
Thumbs.db
# ログファイル
*.log
logs/
# 一時ファイル
*.tmp
*.temp
temp/
EOF
git add .gitignore
git commit -m ".gitignoreを追加"例題22:グローバルな.gitignoreを設定
# グローバル設定ファイルを作成
cat > ~/.gitignore_global << EOF
.DS_Store
*.swp
.idea/
EOF
# Gitに設定
git config --global core.excludesfile ~/.gitignore_global例題23:無視されるファイルを確認
git status --ignored例題24:特定のファイルが無視されるか確認
git check-ignore -v filename.log例題25:直前のコミットを取り消し(ファイルは保持)
git reset --soft HEAD~1例題26:直前のコミットとステージングを取り消し
git reset --mixed HEAD~1 # または単に git reset HEAD~1例題27:完全に直前のコミットをなかったことに
git reset --hard HEAD~1 # 注意: 変更が失われる例題28:特定のコミットを打ち消す新しいコミットを作成
git revert abc1234 # abc1234は取り消したいコミットID例題29:マージコミットをリバート
git revert -m 1 merge-commit-id例題30:Git操作の履歴を確認
git reflog例題31:誤って削除したコミットを復元
# reflogで削除前のコミットIDを確認
git reflog
# 復元
git reset --hard HEAD@{2}例題32:よく使うコマンドのエイリアスを設定
# ステータスの短縮形
git config --global alias.st status
# ログの見やすい表示
git config --global alias.lg "log --oneline --graph --all"
# 最後のコミットを修正
git config --global alias.amend "commit --amend --no-edit"
# ブランチの一覧(最終更新日付き)
git config --global alias.br "branch -v"
# 差分を見やすく
git config --global alias.df "diff --word-diff"3つの連続したコミットを作成し、インタラクティブリベースを使って1つのコミットにまとめてください。
作業中の変更をスタッシュに保存し、別のブランチで緊急の修正を行った後、元のブランチに戻ってスタッシュを適用してください。
プロジェクトに以下の要件で.gitignoreを作成してください:
*.logファイルを無視temp/ディレクトリを無視- ただし
temp/important.txtは追跡する
v1.0.0、v1.1.0、v2.0.0の3つのタグを作成し、v1.1.0だけを削除してください。
最新の3つのコミットをなかったことにして、その変更を1つの新しいコミットとして作り直してください。
# 3つのコミットを作成
echo "機能A" > feature-a.txt
git add feature-a.txt
git commit -m "機能Aを追加"
echo "機能B" > feature-b.txt
git add feature-b.txt
git commit -m "機能Bを追加"
echo "機能C" > feature-c.txt
git add feature-c.txt
git commit -m "機能Cを追加"
# インタラクティブリベースで結合
git rebase -i HEAD~3
# エディタで2番目と3番目のpickをsquashに変更
# 新しいコミットメッセージを入力# 作業中の変更を作成
echo "作業中" > work-in-progress.txt
git add work-in-progress.txt
# スタッシュに保存
git stash push -m "機能Xの作業中"
# 別のブランチで緊急修正
git checkout -b hotfix
echo "緊急修正" > urgent-fix.txt
git add urgent-fix.txt
git commit -m "緊急のバグを修正"
# 元のブランチに戻ってスタッシュを適用
git checkout main
git stash pop# .gitignoreを作成
cat > .gitignore << EOF
# ログファイルを無視
*.log
# tempディレクトリを無視
temp/
# ただしimportant.txtは追跡
!temp/important.txt
EOF
# ディレクトリとファイルを作成してテスト
mkdir temp
echo "重要" > temp/important.txt
echo "ログ" > temp/debug.log
git add .
git status # important.txtだけがステージングされることを確認# タグを作成
git tag v1.0.0
git tag v1.1.0
git tag v2.0.0
# タグを確認
git tag
# v1.1.0を削除
git tag -d v1.1.0
# 削除後の確認
git tag# 最新3つのコミットをソフトリセット
git reset --soft HEAD~3
# 変更がステージングエリアにあることを確認
git status
# 1つの新しいコミットとして作成
git commit -m "機能A、B、Cを統合"この章では、Gitの高度な機能について学習しました。リベース、スタッシュ、タグなどの機能を使いこなすことで、より効率的で整理されたGit運用が可能になります。
これで基本的なGitチュートリアルは完了です。実際のプロジェクトでこれらの機能を使いながら、さらに理解を深めていってください。
お疲れさまでした!