目次
- 目次
- はじめに
- コミットメッセージにdiffを表示する
- 前回コミットした時の状態に戻す
- 直前のコミットをなかったコトにする
- 直前のpushをなかったことにしたい。
- 無理やりリモートリポジトリにローカルを合わせる
- 間違えたgitのaddを取り消す
- 一つ前のコミットを修正
- git pullした時にコンフリクトしたファイルを調べる
- 更新されたファイルの一覧を表示する
- ブランチのグラフを見たい
- gitで管理していないファイルやディレクトリをすべて削除する。(gitinore対象のファイルも含めて)
- 過去のコミットを分割したり、統合したり、順番を変えたりしたい。
- 別のブランチのあるコミットだけをmergeしたい
- GitHubでforkした自分のリポジトリを更新する
- 参考資料
- MyEnigma Supporters
はじめに
Gitを使う時に
毎回ググっていることが多いので、
メモとして残しておきます。
GitやGitHubの基本的な使い方に関しては、
下記を参照ください。
JetBrains IDEによるGitの使い方は、
下記を参照ください。
コミットメッセージにdiffを表示する
$ git commit -v
変更自動検出を組み合わせると、
$ git commit -av
前回コミットした時の状態に戻す
$ git reset --hard HEAD
前回のコミットからすべてなかったコトになるので注意が必要です
直前のコミットをなかったコトにする
$ git reset --hard HEAD^
上記だとファイルもコミット前に戻りますが、
$ git reset --soft HEAD^
だとコミットだけがなかったことになり、
ローカルのファイルはそのままになります。
直前のpushをなかったことにしたい。
下記の記事の通り、2つの方法があります。
履歴を残さない
$ git reset --hard HEAD^
$ git push -f origin master
履歴を残す(より安全)
revertで直前のコミットを打ち消すコミットをします。
$ git revert HEAD
$ git push -f origin master
無理やりリモートリポジトリにローカルを合わせる
なんか変なことしてパニックになった時に使います。
$ git fetch origin
$ git reset --hard origin/master
間違えたgitのaddを取り消す
間違ってgit addしちゃうことは多いですが、
そんな時は、
$ git reset HEAD hote.txt
でaddを取り消すことができます。
一つ前のコミットを修正
コミットしてみたが、
コミットメッセージを変えたくなったり、
ファイルをaddし忘れた時などは、
下記のコマンドを使います
$ git commit --amend
上記のコマンドを使うと、
一つ前のコミットと今回のコミットを一緒にしてくれます。
また、
$ git commit --amend "New commit message"
で一つ前のコミットメッセージを修正できます。
git pullした時にコンフリクトしたファイルを調べる
$ git ls-files -u [path]
同じように
git statusをした時に、
Unmerged paths:に書かれているファイルも
コンフリクトしているので、
そちらで確認する方法もあります。
更新されたファイルの一覧を表示する
$ git ls-files -m
ブランチのグラフを見たい
$ git log --graph
gitで管理していないファイルやディレクトリをすべて削除する。(gitinore対象のファイルも含めて)
$ git clean -xdf
過去のコミットを分割したり、統合したり、順番を変えたりしたい。
$ git rebase -i
で可能です。
上記のコマンドを実行すると、
下記のように、各コミットが順番で表示されるので、
行を入れ替えることで、順番を変更することができます。
また、上から下に古いコミットが並んでおり、
pickの部分をs, もしくはsquashに書き換えると、
そのコミットは、上のコミットにマージされ、統合されます。
一方、pickの部分をe,もしくはeditにすると、
そのコミットを編集できるため、
複数のコミットに分割できます。
一つ注意点として、
複数の変更を同時に変更すると、
rebaseに失敗することがあるため、
一つ一つ修正して、rebaseを終了するのがコツです。
JetBrainsのIDEで実施する場合は下記の記事を参照ください。
別のブランチのあるコミットだけをmergeしたい
別のブランチのあるコミット(その前のコミットは不要)だけをmergeしたい場合は、
cherry-pickを利用します。
また-nオプションを使うことで、
いきなりコミットするのではなく、
対象のコミットの変更をchangelistに入れるだけにすることもできます。
ちなみにこの機能はJetbrains IDEでは使えないようです。
Jetbrains IDEでコミット無しのcherry pickをしたかったけど、なぜかその設定は前はあったけど、消されたらしい。。https://t.co/h3wsQZb9PK
— Atsushi Sakai (@Atsushi_twi) 2022年4月29日
GitHubでforkした自分のリポジトリを更新する
GitHubでOSSを開発していると、
forkした自分のリポジトリを元のリポジトリの最新で更新したい時があります。
普通にfetchしてきて、mergeすることも可能ですが、
下記の記事の通り、gitのhistoryが読みにくくなります。
そこで使うのが、rebaseです。
コマンドラインで実行する場合は、具体的には下記を参照ください。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。