LoginSignup
16
17

More than 3 years have passed since last update.

Gitでいろいろ取り消したい

Last updated at Posted at 2019-04-03

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の扱いは慎重に。

16
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17