Zenn
Open10

Git・GitHub関連の Tips集📝 (git 操作チートシート / Git管理削除 / Git初期化)

ピン留めされたアイテム
まさぴょん🐱まさぴょん🐱

Gitの管理を終わらせる

Gitコマンドでは、ありませんが、.gitディレクトリをプロジェクトから削除すれば、Git管理状態を削除する(終わらせる)ことができます。

rm -r .git

# Permission deniedになる場合
sudo rm -r .git
まさぴょん🐱まさぴょん🐱

ブランチ名の変更方法(ローカル, リモート)

  • ブランチ名が長すぎることでCIが転けたので、ブランチ名の変更方法(ローカル, リモート)をまとめる。

ローカルのブランチ名を変更

git branch -m 古いブランチ名 新しいブランチ名

# 今いるブランチの名前を変更する場合
git branch -m 新しいブランチ名

リモートブランチ名の変更

  • リモートブランチに関しては、名前を変更するのではなく、名前を変更したブランチを新たにpushします。
    • PRとかコードへのコメントとかは新しいブランチにはないのでご注意ください。

手順としては、

  1. ローカルのブランチ名を変更
  2. 変更したブランチを新たにリモートへpush
  3. Rename前のリモートブランチをClose or 削除する

変更したブランチを新たにリモートへpush

git push origin -u new-branch

Rename前のリモートブランチを削除する

git push origin --delete old-branch

参考・引用

https://qiita.com/shungo_m/items/4218e70751375b4bfeec

https://kinsta.com/jp/knowledgebase/git-rename-branch/

まさぴょん🐱まさぴょん🐱

GitHubにて、PRのMerge先を後から変更する方法は?

GitHubでは、Pull Request(以下PR)を作成した後でも、次のような手順でマージ先のブランチ(Base Branch)を変更することが可能です。

手順:

  1. 対象のリポジトリのGitHubページで、変更したいPRを開きます。
  2. PRのタイトルの右側付近にある「Edit」ボタン(鉛筆アイコン)をクリックします。
    • もし「Edit」ボタンが表示されない場合、あなたに編集権限がない可能性があります。その場合はリポジトリ管理者またはPRの作成者に依頼してください。
  3. 「Edit」モードに切り替わると、PRのタイトルの下部にある「base」ブランチを選択するプルダウンが表示されます。
  4. 現在設定されているブランチ名をクリックし、変更先のブランチ(例えば maindevelop)を選択します。
  5. ブランチを変更したら、画面下部の「Save」または「Update pull request」ボタンをクリックします。

これで、PRのマージ先が新しいブランチに切り替わります。
なお、マージ先を変更すると、差分やコンフリクト状況が再計算されるため、変更後にPRの差分や状態を確認し直すことをおすすめします。

まさぴょん🐱まさぴょん🐱

git pull してコンフリクトした際に、git pullを取り消すには?

「git pull」は内部的に「git fetch」と「git merge」(もしくは設定によっては「git rebase」)を行っています。
コンフリクト発生時にまだマージが完了していない状態であれば、マージを中断(取り消し)するには以下のコマンドを使います。

  • マージを行っている場合:

    git merge --abort
    

    これにより、マージ開始前の状態に戻ります。

  • リベースを行っている場合(pull.rebaseなどの設定が有効なとき):

    git rebase --abort
    

    こちらもリベース開始前の状態に戻ります。


もしすでにマージコミットしてしまった場合

もしマージコミットまで完了してしまった場合は、以下のように手動で履歴を戻す方法があります。

  1. 直前のコミット(マージコミット)を取り消す:

    git reset --hard HEAD^
    
    • HEAD^ (あるいは HEAD~1) は直前のコミットを指します。
    • これによってマージコミットも含め 作業ツリーの状態が完全に マージ前の状態に戻ります。
  2. もしpushしてしまった場合:
    既にリモートに反映されていると、単純にローカルでresetしてpushするだけでは履歴が「強制的」に書き換わることになるため、他のメンバーへの影響を十分考慮してください。必要に応じて下記のコマンドを使いますが、一般的にはチーム内での合意が必要になります。

    git push --force
    

    このコマンドを使うとリモートの履歴が書き換わり、push後にチームメンバーが持っている履歴との整合性が崩れる可能性があります。


まとめ

  1. コンフリクト解消前:

    • まだマージ・リベースが完了しておらず衝突が起きている状態なら
      • マージ: git merge --abort
      • リベース: git rebase --abort
        で「pull前の状態」に戻ることができます。
  2. コンフリクト解消後にマージコミットが入った場合:

    • ローカルだけであれば、git reset --hard HEAD^ でマージ前の状態へ戻る
    • リモートにもpushしている場合は要注意。強制push(git push --force)は履歴の書き換えになるため、チーム全体の了承のもと行いましょう。
ログインするとコメントできます