Git コマンド逆引き集(随時更新)
Git を使っていて、「あの操作をするのにどうするんだっけ?」ということが増えてきたので、備忘録代わりにまとめていきます。基本的には IDE を使って Git を操作することが多いので、IDE のメニューから操作できるものについては触れません。また、私自身が使うのに必要なものだけをまとめるので網羅性に欠けるかもしれませんが、ご容赦を。
既存のディレクトリを Git で管理してリモートリポジトリと紐づける
cd /path/to/project
git init
git remote add origin https://github.com/example/test.git
git add *
git commit -m 'First Commit'
git push -u origin master
リモートリポジトリと紐づけるコマンドは、3行目の git remote add
コマンドになります。git push
の -u
オプションは、git push
のデフォルトの送信先を指定するもので、git remote add
で origin と名付けたリモートリポジトリの master ブランチをデフォルトの送信先に指定しています。これによって、以後は git push
のみでプッシュできるようになります。
ディレクトリ名を指定して git clone する
git clone https://github.com/example/test.git git_test
git clone
は、デフォルトでリモートリポジトリ名でディレクトリを作成しますが、複数のプロジェクトを扱っていると、名前が競合してしまうことがあります。そのような場合は、git clone
の第二引数にディレクトリ名を指定することで任意のディレクトリ名で clone してくることができます。
リモートリポジトリを変更する
git remote set-url origin https://github.com/example/test.git
コミット履歴などを引き継ぐ必要がなければ上記のみで OK で、この後に git push
すれば、新しいリモートリポジトリに転送することができます。
リモートリポジトリを移行する
git clone --mirror {old_url} tmp
cd tmp
git push --mirror {new_url}
コミット履歴やタグなどを引き継いで移行する場合は上記の方法となります。移行後は移行時に作成した tmp ディレクトリは削除して構いません。その後改めて git clone {new_url}
すればよいと思います。
強制的に pull する
git fetch
git reset --hard origin/{branch_name}
git push
には強制的にローカルの内容で push する --force
オプションがありますが、git pull
には、ローカルの変更を無視して強制的にリモートの内容で pull するオプションはありません。そこで git fetch
で最新のリモートリポジトリの状態を取得し、ローカルリポジトリを指定したブランチの状態に強制的に戻す git reset --hard
を使います。
git commit 時に記録される名前やメールアドレスを変更する
git config --global user.email example@example.com
git config --global user.name "YAMADA Taro"
上記のコマンドで変更されるのは、ログインしているユーザーが git を操作したときのデフォルト値で、~/.gitconfig
が更新されます。上記の例のように、スペースが含まれる場合には、ダブルクォーテーションで値を囲みます。
リポジトリごとに設定を変更したい場合は、そのリポジトリのディレクトリに移動して
git config --local user.email example@example.com
git config --local user.name "YAMADA Taro"
とします(--local
は省略可)。この場合は、{repository_dir}/.git/config
が更新されます。リポジトリのディレクトリでない場所で実行すると、fatal: not in a git directory
のエラーとなります。
ファイルを Git の管理から外すが、ファイルは残したい
git rm --cached test.txt
git rm
に --cached
オプションを付けることで、Git の管理から外しつつ、ローカルのファイルを残すことができます。ただ、この状態で push してしまうと、他のユーザーの test.txt は消えてしまうので、注意が必要です。
他のユーザーも test.txt を引き続き利用したい(ただし、Git では管理したくない)という場合には、.gitignore に test.txt を追記して push したうえで、いったん test.txt をディレクトリの外に退避させて pull した後に元に戻すという微妙な手順を踏むことになります。
「ファイルの変更を Git で管理したいけど、ローカルファイルは変更されたくない」という場合には
git update-index --skip-worktree test.txt
で追跡から外すことができます。仮にリモートリポジトリのファイルが変更された後に pull してもローカルのファイルは上書きされません。元に戻したいときは
git update-index --no-skip-worktree test.txt
を実行します。
コミットをなかったことにする
直前の commit だけを取り消す(add はそのまま)
git reset --soft "HEAD^"
Windows では、ダブルクォーテーションで括らないとエラーになります。単に取り消すだけでなく、commit しなおすのであれば
git commit --amend
でも可。
add も取り消す(変更されたファイルはそのまま)
git reset --mix "HEAD^"
git reset
のデフォルトオプションは --mix
なので
git reset HEAD^
でも同じ結果になります。
直前の commit の状態にファイルも戻す
git reset --hard "HEAD^"
特定のコミットを別ブランチにマージする
git cherry-pick {コミット番号}
コミット番号は
git log --pretty=format:"%C(auto)%h %ad %s" {ブランチ名} -5
で確認できます(最後の -5 は取得する行数。省略すると全件になる)。
git コマンドのヘルプを確認する
git push -h
git help commit
git コマンドのオプションや引数を確認したいときは -h
を付けます。さらに詳細なヘルプを確認したいときは、git help
コマンドを使います。
ディスカッション
コメント一覧
まだ、コメントがありません