Gitの基本的なコマンドと実践的な使用方法

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で削除したファイルもaddcommitが必要

よくある質問

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/mastergit 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

タグ: Git バージョン管理 コマンドライン ブランチ管理 リポジトリ

6月17日 21:02 投稿