🍋
git コマンドメモ
実際に使ったコマンドライン。
git delete
でブランチを削除する
git checkout main // 目的のブランチから抜ける
// delete local branch
git checkout development
git branch -d branch-name // リモートにある場合
git branch -D branch-name // リモートにない場合
// delete remote branch
git push --delete origin branch-name // リモートのみ削除する、リモートにない場合はエラー
git reset
git reset --hard origin/main // ローカルの変更は完全になくなる、その後 git pull
git reset HEAD // git addの取り消し。ローカルに変更分が残る
git reset HEAD file_name // 同上。特定のファイルのみの取り消し
git reset --soft HEAD~1 // 直前のコミットを取り消す(変更内容は保持される)
git reset --hard HEAD~1 // 直前のコミットを取り消す(変更内容は完全になくなる)
git stash
で現在の変更を退避する
git stash // 簡易
git stash apply // 最後にStashしたものが戻る
git stash save "message" // メッセージを入れる場合
git stash list // これまでのStashしたリストを見る
git stash apply 3 // stash@{3}に戻す
git stash push -- package-lock.json //1ファイルだけStashする
git config
のローカルとグローバル
// 設定はすべてのプロジェクトおよびリポジトリで共有される
git config --global user.name "xxx"
git config --global user.email yyy@zzz.com
// 異なるユーザー情報を使う場合、以下のようにローカルリポジトリ内で設定する
git config user.name "xxx"
git config user.email yyy@zzz.com
その他の便利なコマンド
git commit --amend //コミットメッセージを変更する
git log origin/master --oneline // masterブランチの履歴を1行で表示する
リベースを使った作業後の手順
git switch -c [branch-name]
git add .
git commit -m "commit message"
git push origin HEAD // 一旦、pushしておくと安全
git stash // 必要な場合
git pull --rebase origin development // リベース
// ローカルで自分の変更の動作を試し、問題がなければ以下をやる
git branch --set-upstream-to=origin/[branch-name] // 必要な場合、紐付けする
git push -f origin [branch-name]
自分の変更のみを一旦、プッシュするのは、必ず動く状態をとっておくため。他の人の変更で、自分の変更が動かなくなった場合は、解決するまでプッシュしないのが安全。git checkout -b [branch-name]
は、git switch -c [branch-name]
(Git v2. 23以降)は同じこと。
Git Rebase
でコミットを Squash(統合)する手順
git add .
git commit -m "comment message"
git rebase -i [branch name]~2 //現在のブランチに対して最後の2つのコミットを統合する
// vim で操作 - 統合したいコミットの前にある「pick」のテキストを「s」に変更する
git push -f origin [branch name] //リモートリポジトリに強制的にプッシュする
git pull --rebase origin development
は、以下の2行と同じ
git config pull.rebase true // リベースにセット
git pull origin development
.git/config
で、rebase: true
にセットされる。
PR(プルリクエスト)後に大きな変更がある場合、新しいブランチを作成してそこで変更を進める手順
pr-branch
: main
へマージしようとしているPRブランチ
pr-branch-working
: 作業ブランチ
PRブランチをリベース:
git checkout pr-branch # PRブランチに戻る
git pull --rebase origin main # リベース(main ブランチの最新の状態を取り込む)
作業ブランチの作成と変更のコミット:
git checkout pr-branch # PRブランチへ移動
git checkout -b pr-branch-working # 作業ブランチを作成
git add . # 変更をステージングする(. は全ての変更を指す)
git commit -m "Your commit message" # コミットを作成
PRブランチに変更があれば、再びリベース:
git checkout pr-branch # PRブランチに戻る
git fetch # origin/main の最新情報をローカルにダウンロード
git pull --rebase origin main # 変更があればリベースして最新の状態を取り込む
作業ブランチをリベース:
git checkout pr-branch-working # 作業ブランチに戻る
git rebase pr-branch # PRブランチの変更を作業ブランチにリベース
新しいブランチが問題なくリベースされたら:
git checkout pr-branch # PRブランチに戻る
git rebase pr-branch-working # リベース(PRブランチの最新の状態を作業ブランチに取り込む)
リベースに失敗した場合
git checkout my-branch # 作業中のブランチに移動
git pull --rebase origin main # リベース(main ブランチの最新の状態を取り込む)
# リベース中にコンフリクトが発生し、手動で解決できない(リベースに失敗)
git rebase --abort # リベースを中止して、リベースを開始する前の状態に戻す
git pull --rebase origin main # リベースのやりなおし
git checkout mainを使ってファイルをリセットする(mainの状態に戻す)
git checkout my-branch # 作業しているブランチにチェックアウト
git checkout main -- filepath/filename.tsx # mainの状態にファイルをリセットする
git add filepath/filename.tsx # ステージングに追加
git commit -m "Reverted filename.tsx to main" # コミットメッセージ
git push -f origin [branch name] # リモートリポジトリに強制プッシュ
Discussion