Gitの基本操作
コミットメッセージのプレフィックスに関する規約:
[refactor]- 大規模なクラスの調整や構造の変更時に使用[modify]- ファイルレベルまたは関数レベルの変更や削除[feature]- 新機能の追加や新ファイルの作成[bugfix]- バグ修正
ブランチ操作
- 全てのブランチを表示:
git branch -a - 指定ブランチに切り替え:
git checkout develop - 新規ブランチ作成と切り替え:
git checkout -b develop - 履歴のない独立したブランチ作成:
git checkout --orphan new_branch - ブランチ削除:
git branch -d develop(ローカルブランチのみ削除) - ファイル削除:
git rm test.py - 変更をステージングエリアに追加:
git add - コミット実行:
git commit -m '変更内容の説明'
addコマンド
- 特定ファイルを追加:
git add a.py - 全ファイルを追加:
git add .
add後にコミット前の状態を取り消す方法:
- 単一ファイル:
git reset HEAD file - 複数ファイル:
git reset HEAD
checkoutコマンド
- ファイルの変更を取り消す:
git checkout file
remote操作
- リモートリポジトリ追加:
git remote add [origin] [url]
commit操作
- コミット実行:
git commit -m "コミットメッセージ"
stash操作
- 作業の一時保存:
git stash(未完了の作業を一時的に保存) - 作業の復元:
git stash pop(保存した作業を復元)
タグ操作
タグは特定のコミットに名前を付けるものです。
- 全タグ表示:
git tag - 注釈付きタグ作成:
git tag -a v2.1 5e39ad35a98 -m "タグの説明" - 簡易タグ作成:
git tag v2.1 5e39ad35a98 - 最新コミットにタグ作成:
git tag v2.4 - タグ詳細表示:
git show v2.4 - タグ削除:
git tag -d v2.4 - 全タグをリモートにプッシュ:
git push origin --tags
新しく学んだ知識
git rmで削除したファイルもaddとcommitが必要
よくある質問
Q: リモートから最新状態をプルした後、マージの履歴を確認するには?
A: git log --graph --oneline --all
Q: 特定ファイルのマージ前後の差異を確認するには?
A: マージ前のコミットがabc123、マージ後がdef456の場合:
git diff abc123 def456 path/to/your/file.txt
git pull origin develop実行後は自動的にコミットが作成されるため、git logでSHA値を確認できます。
Q: 他のブランチの履歴に依存しない独立したブランチを作成し、リモートから最新を取得して開発を始めるには?
A: 以下の手順で実行します:
git checkout --orphan clean_branch
git status
git rm -r ./
git commit -m "初期コミット"
git status
git rm ./ -r
git status
git commit -m "ブランチ初期化"
git pull origin main --allow-unrelated-histories
Q: git clone時に全てのブランチをダウンロードせず、特定のブランチのみをクローンする方法は?
A: git clone -b <ブランチ名> --single-branch <リポジトリURL>
Q: ローカルのdevelopブランチを元にmasterブランチを作成し、全内容をリモートのmasterに同期するには?(ローカルリポジトリを新規作成したリモートリポジトリに同期する場合)
A: 現在developブランチにいると仮定した場合:
git checkout --orphan master
git fetch origin master
git pull origin master
# リモートmasterとローカルmasterで競合するファイルがある場合、
# ローカルファイルを一時的にリネームしてから実行
# 必要に応じてリネームしたファイルの内容をmasterから取得したファイルにマージ
git add .
git commit -m "ローカルmasterをリモートに同期"
Q: git fetchの役割は何ですか?
A: git fetch origin masterは、リモートリポジトリ(この例ではorigin)からmasterブランチの最新変更を取得しますが、現在のブランチにはマージしません。具体的には以下の処理を行います:
- リモートリポジトリとの通信確立
- originリポジトリのmasterブランチから最新コミットとオブジェクトの取得
- 取得したデータをローカルリポジトリに保存し、ローカルのorigin/master参照を更新
注意点:
- fetchコマンドは現在のブランチやその内容を変更しません
- pullコマンドとは異なり、fetchは変更を自動的にマージしません
- 変更をマージするには、追加で
git merge origin/masterやgit rebase origin/masterを実行する必要があります
実践的な使用例
ローカルで管理していたリポジトリをリモートリポジトリに反映させる方法
解決策1:
- ステップ1:GitHubやGiteeなどでリモートリポジトリを作成
- ステップ2:ローカルでリモートリポジトリのURLを追加:
git remote add [origin] [url] - ステップ3:リモートのインデックスを取得:
git fetch origin - ステップ4:メインブランチに切り替えてマージ:
git merge origin/master --allow-unrelated-histories - ステップ5:リモートにプッシュ:
git push origin master
解決策2:(READMEなしのリモートリポジトリを作成した場合)
cd existing_folder
git init --initial-branch=master
git remote add origin git@github.com:user/repo.git
git add .
git commit -m "初期コミット"
git push -u origin master