プロクラシスト

みんなのProcrastination(先延ばし、回り道)を少しでも有意義に。

MENU

Gitで操作(add, commit, push)を取り消す方法

こんばんは!ほけきよです。 昨日は、初心者が覚えるべきコマンドを紹介しました。

www.procrasist.com

しかし、アレだけでは足りません。
Gitを使い始めると、conflictとかでいろいろ頭を抱えることが多くなると思います。少なくとも私はそうです。未熟なもので。。。

今回は、Gitをより自由に使っていくためのコマンドたちを紹介します。

よく起こるミスとその直し方

直前のcommitまで戻る

  • git checkout <file>

commitのメッセージを変える

  • git commit --amend
  • git commit --amend -m "hogehoge" 一行バージョン

ログに変更したものの履歴まで表示させたい

  • git log --stat
commit 0ac447450a00d607d94902331eee8ec042bf8c97
Author: (設定したもの)
Date:   Wed Oct 12 00:57:59 2016 +0900

    Initial Commit

.gitignore | 2 ++
README.md  | 1 +
memo.md    | 0
3 files changed, 3 insertions(+)

コミットをコピー

  • git logから、commit hashを6-7文字コピー
  • git checkout hogehoge hogehogeブランチに移動
  • git cherry-pick <hash> さっきのコミットをコピー

commitを消す : 状況に応じて4つ使い分ける

  • git reset --soft <hash>
    • 消えるが、staging areaに変更が残る(再度commit可能)
  • git reset <hash>
    • 修正したfileはstaging areaに残る。追加したfileはworking directoryに残る
  • git reset --hard <hash>
    • 修正履歴は消える
    • untracked files(まだaddしていない、新しく追加されたファイル)は残る
  • git clean -df
    • untracked files(追加したファイル)も消える

commitの実行履歴を表示する

  • git reflog
  • ハッシュが表示される
0ac4474 HEAD@{0}: commit (initial): Initial Commit

特定の実行履歴のところまで戻れる

  • git checkout <hash>

履歴を残しつつ、変更前に戻したい

  • 歴史の改変はあんまりしないほうが良い場合もある
  • git revert <hash>
  • logには、「変更前に戻したよ」というのが追加される

git stash の使い方

  • git checkout -b newbranch -> ファイル変更
    • working directoryに色々残っててほかのbranchに移れない
    • git stashがとても便利
  • git stash save "some changes"
    • あたかも変更されていないように、一時的に退避
$git stash save "test"
  • git stash list
    • stashしたものがメッセージと一緒に残る
stash@{0}: On master: test
  • git stash apply stash@{#} #:数字
    • 戻すことがデキる
  • stash listから退避してたものを消す
    • git stash pop
      • 最新のものを消す
    • git stash drop stash@{#}
      • 狙ったものを消す
    • git stash clear
      • すべて消す

まとめ

この位できるようになってくれば、便利だなと感じることも多くなってきます。 Gitは一度覚えてしまえばとても便利なので、何度もコマンドを使うことで覚えましょう。 それではまた明日!

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)