Git メモ
目次
基本
各種設定
初期ユーザ設定
git config --global user.name "Alice"
git config --global user.email alice@example.com
リモートリポジトリ設定
- SSH 認証の github 設定
-
リモートリポジトリの登録
# 自分の GitHub リポジトリの設定コマンド git remote set-url origin github:(user_name)/(repo_name).git git remote add origin /url/to/remote/repo git push -u origin main -
リモートリポジトリの変更
# [リモートリポジトリの移動](https://qiita.com/orange5405/items/783b74667bcc69a34a52)(タグは移動できない様子) git clone --mirror /path/to/source/repo.git cd repo.git git push --mirror /path/to/destination # URL変更 git remote set-url origin /path/to/new/url -
リモートリポジトリの作成
cd /path/to/remote/repo git init --bare --shared cd /path/to/local/repo git remote add origin /path/to/remote/repo
gitignore 設定
- gitignore.io
-
git rm --cached hoge -
* !*/ !/.gitignore
ブランチ操作
基本は以下。
# リモートブランチをチェックアウト
git checkout -b develop origin/develop
# デフォルトブランチの変更:master → main
git branch -m master main
git fetch origin
git branch -u origin/main main
# 一部まで push
git push origin [commit_ID]:refs/heads/[branch_name]
内容を選別して merge する場合はこれ。
git merge --no-commit --no-ff ${branch_name}
git reset . # 一旦すべて unstage
# 内容を確認しながら一つずつ git add していく
コミットをまとめる
CLI で全コミットを一つにまとめる方法は以下。
# 新しいブランチ作成・全てステージング
git checkout --orphan new-branch
git add -A
# コミット作成
git commit -m "Squashed commit"
# ブランチ削除・置き換え
git branch -D main
git branch -m main
#上書き
git push origin main --force
一部のコミットを Squash してまとめるには VSCode の GitLens による Interactive Rebase が便利。
- コマンドパレットから
GitLens: Enable Interactive Rebase Editorを事前に設定しておく。 - コマンドパレットから
GitLens: Git Rebase - 変更をかけないコミットのうち最も新しいコミットを親として選択。
- Squash 選択で統合対象のコミットを指定。
- コミットメッセージの編集画面が出るので変更して保存・タブを閉じて終了。
リポジトリ操作
差分比較・パッチ作成
CLI 操作としては以下。
# コミットしていない変更をパッチ化
git diff > diff.patch
# コミット(SHA)・ブランチ間の変更をパッチ化
git ${New SHA or Branch name}..${Old SHA or Branch name} > diff.patch
VSCode の GitLens を使う方法は以下。
GitLens Inspectタブを開くSearch & Compare欄を展開Compare Referencesボタンを押下- New → Old の順でコミット・ブランチを選択
- New に HEAD を選んでおけば Old からの部分指定 Revert が可能
リセット
- HEAD だけ削除:
$ git reset --soft @~- コミットを削除・コミット候補は維持
- 最新のコミットをキャンセル
- Index も削除:
$ git reset [--mixed] @- 次のコミット候補をリセット・ローカルの変更を保持
- ステージをキャンセル
- Working Tree も削除 :
$ git reset --hard @- ローカルの変更も削除
- ローカルの変更をキャンセル
- 監視対象外の内容も削除:
$ git clean -df
やり直し
-
# ローカルの変更を退避 git stash # ブランチ変更 git checkout another_branch # ローカルの変更を戻す git stash apply -
$ git reflogで HEAD 履歴確認- 直前の状態に戻るなら :
$ git reset —hard HEAD@{1}
Tips
- HEAD の指定
- alias として @ が使える
- @~[n] : n回、1番目の親をたどる
- @^[n] : n番目の親をたどる
- (ex.) @~~ と @^^ は同じ。@^2は違う。
- (ex.) @^2~3:最初は2番目の親を1回たどり、その後毎回1番目の親を3回たどる
コマンド等
- tig
-
# 初期化 git flow init # feature ブランチ開始 git flow feature start test # feature ブランチ終了 git flow feature finish test # リリース開始 git flow release start 0.1.0 # CHANGELOG.md 編集など # リリース終了 # マージのメッセージはそのまま・タグ生成時にメッセージを追加 git flow release finish
その他
プラグイン等
- Vscode 向け
- GitLens, Git Graph, Git History