🍋

git コマンドメモ

2023/06/25に公開

実際に使ったコマンドライン。

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