Gitでいろいろミスすることってありますよね。
そのミスを解決するネタ的な記事です。
Gitの全体図
Gitの構成として、「リポジトリ」でファイルを管理していきます。そのリポジトリにファイルをもってくるためには「登録(add)」と「コミット(commit)」が必要になってきます。この処理ができた段階で、最後にリモート上にあるリポジトリにプッシュ(push)していきます。プッシュするとリモートに反映されてforkやpullをして、ローカルリポジトリに追記した内容等が反映されます。
参考:https://backlog.com/ja/git-tutorial/intro/intro1_4.html
ローカルの取り消し
そもそも、ローカル上の変更の取り消しをしたい場合は、checkout
で十分です。
$ git checkout .
ただし、新規ファイルの作成で作成したファイル等は削除されませんので、そこは注意(下記コマンドで可能)。
$ git clean -df .
addの取り消し
$ git reset HEAD .
このコマンドによりgit のステージングから取り除かれ、add前の状態になります。
add する前の状態に戻すということなので、コミットした場合の状態は戻していません。
commitの取り消し
$ git reset --hard HEAD~
上記は直前のコミット履歴を消し去る方法です。
他にも、コミットを変更するうえで「revert
」と「--amend
」があります。
revert
git revert コミットのハッシュ値
指定したコミット時点の状態にまで戻し、コミットを行います。(履歴は消えません。)
--amend
git commit --amend
--amend
は直前のコミットに上書きするときに使用します。
使用方法は様々ですが、下記の場合でよく用いられます。
- コミットメッセージを変更したい時
-
git rebase
失敗した時、コンフリクトを避けるためにコミットを上書きしたい時
pushの取り消し
$ git revert [<commit>]
$ git push
pushに関しては特に変わった操作はなく、コミット履歴で変わったもの(git revert [<commit>]
)をpushしましょう。
mergeの取り消し
$ git reset --hard HEAD^
addやcommit同様にresetで取り消し可能です。
HEAD^
でひとつ前に指定し、--hard
で強制的に戻すという意味です。
ハッシュ指定でもOKです(下記コマンド)。
$ git reset --hard aaaa(ハッシュ)
pull requestの取り消し
git push --delete origin [ブランチ名]
pull requestを送ったブランチ名を指定して--deleteオプションつきでpush
$ git push --delete origin [ブランチ名]
git tag取り消し
- git tag -d タグ
- ローカルのタグを取り消し
$ git tag -d タグ
- git push origin :refs/tags/タグ
- リモートのタグを取り消し
$ git push origin :refs/tags/v1.0.6
まとめ
Gitの扱いは慎重に。