MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

困った時の逆引きGitメモ(コマンドライン編)

目次

はじめに

Gitを使う時に

毎回ググっていることが多いので、

メモとして残しておきます。

 

GitやGitHubの基本的な使い方に関しては、

下記を参照ください。

myenigma.hatenablog.com

 

JetBrains IDEによるGitの使い方は、

下記を参照ください。

myenigma.hatenablog.com

 

コミットメッセージにdiffを表示する

$ git commit -v

変更自動検出を組み合わせると、

$ git commit -av

 

前回コミットした時の状態に戻す

$ git reset --hard HEAD

前回のコミットからすべてなかったコトになるので注意が必要です

 

直前のコミットをなかったコトにする

$ git reset --hard HEAD^

上記だとファイルもコミット前に戻りますが、

$ git reset --soft HEAD^

だとコミットだけがなかったことになり、

ローカルのファイルはそのままになります。

 

直前のpushをなかったことにしたい。

下記の記事の通り、2つの方法があります。

www-creators.com

履歴を残さない

$ 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を取り消すことができます。

qiita.com

 

一つ前のコミットを修正

コミットしてみたが、

コミットメッセージを変えたくなったり、

ファイルを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にすると、

そのコミットを編集できるため、

複数のコミットに分割できます。

ken-c-lo.hatenadiary.org

 

一つ注意点として、

複数の変更を同時に変更すると、

rebaseに失敗することがあるため、

一つ一つ修正して、rebaseを終了するのがコツです。

 

JetBrainsのIDEで実施する場合は下記の記事を参照ください。

myenigma.hatenablog.com

 

別のブランチのあるコミットだけをmergeしたい

別のブランチのあるコミット(その前のコミットは不要)だけをmergeしたい場合は、

cherry-pickを利用します。

www.sejuku.net

 

また-nオプションを使うことで、

いきなりコミットするのではなく、

対象のコミットの変更をchangelistに入れるだけにすることもできます。

ちなみにこの機能はJetbrains IDEでは使えないようです。

 

GitHubでforkした自分のリポジトリを更新する

GitHubでOSSを開発していると、

forkした自分のリポジトリを元のリポジトリの最新で更新したい時があります。

普通にfetchしてきて、mergeすることも可能ですが、

下記の記事の通り、gitのhistoryが読みにくくなります。

sota1235.com

 

そこで使うのが、rebaseです。

コマンドラインで実行する場合は、具体的には下記を参照ください。

gist.github.com

  

参考資料

medium.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com