LoginSignup
2
4

More than 3 years have passed since last update.

gitコマンド備忘録

Last updated at Posted at 2019-05-09

git stash

機能

変更内容を一時的に退避させておく機能

使いどころ

  • branchを切って作業中に他のブランチを修正するように言われた時
  • branch切るのを忘れてmasterで変更してしまった内容を他のbranchに移動させたいとき

コマンド

stashする

$git stash {save}

※saveは省略可能

メッセージを付けてstash

git stash save "message"

addしてない変更のみをstash

$git stash -k

stashした内容を確認する

$git stash list
stash@{0}: WIP on shash_test: af31ecc Create README.md
<stash名>: WIP on <stashを行ったブランチ名>: <ハッシュ> <コミットコメント>

※ハッシュ、コミットコメントはstashを行った時のHEADのもの

変更内容を確認

$ git stash list -p
diff --git a/README.md b/README.md
index 1e523a5..12419f4 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 # git_test
+
+stash_test
\ No newline at end of file

stashしたファイルの一覧を表示

$ git stash show <stash名>

stashした内容を適用する(stashも同時に削除)

git stash pop # 最新のスタッシュを適用し、削除 
git stash pop {N} # N番目のスタッシュを適用し、削除

戻した時にコンフリクトが起きるとか、別なブランチにも適用したいとかなるとめんどそうなのでpopじゃなくてapply→dropで削除するほうが良いと思う。

stashした内容を適用する(stashは残る)

git stash apply # 最新のスタッシュを適用し、残す
git stash apply {N} # N番目のスタッシュを適用し、残す

上記コマンドだと、stash前にaddしていた変更もaddされていない状態に戻る(staged → not staged)

下記のようにオプションをつけて戻すことでaddされた状態で戻せる

git stash apply {0} --index

stashを削除(特定のstash)

git stash drop # 最新のスタッシュを削除
git stash drop {N} # N番目のスタッシュを削除

stashを削除(全て)

git stash clear

git merge

使いどころ

  • masterから切り出した作業ブランチでのcommit,pushが終わった後にコンフリクトが発生してる場合
  • 作業ブランチでの作業中に他のブランチのコミット履歴を取り込みたい時

手順

最新の状態のmasterをmergeしたいのでmasterブランチを最新化

git checkout master
git pull

作業ブランチに戻る

git checkout <topicブランチ>

mergeする

git merge master

コンフリクトが発生したら解消した上でaddしてmergeを続行する

git add <修正したファイル>
git merge --continue

mergeが完了したらcommitしてpush

git rebase

使いどころ

  • 作業ブランチをcommit,pushした後にmasterのコミット履歴を取り込んだ上でそのコミット履歴の後ろに作業ブランチのコミット履歴をくっつけたい時

  • rebaseだとgitのpullリク画面のコミット履歴が綺麗だから自分はよくこっちを使う

手順

最新の状態のmasterをrebaseしたいのでmasterブランチを最新化

git checkout master
git pull

作業ブランチに戻る

git checkout <topicブランチ>

rebaseする

git rebase master

コンフリクトが発生したら解消した上でaddしてrebaseを続行する

git add <修正したファイル>
git rebase --continue

完了したらpushしたいところだが、いつも通りpushしてもできないのでオプションをつけて強制的にpushする

git push -f origin <topicブランチ>

コミット履歴を確認してmasterブランチの履歴→作業ブランチの履歴の順になっているか確認してみる

git log

注意点

複数人が同時に一つの作業ブランチにpushしてる場合、一人がrebaseした後に他の人がpushしようとしてもできないらしいので注意。

Revert/Reset

コミットを元に戻したい時に

Revert

取り消したいコミットを打ち消すようなコミットを新しく作成する。
既存のコミット内容は残ったまま。
特定のコミットを元に戻す。(指定以降の処理全てを戻す場合はreset)

コマンド

revert

revertする(コミットメッセージ編集)

$git revert <commitID>

コミットメッセージを編集しない場合


コミットしないrevert

revertコマンドを使用するとコミットも行う。
indexに戻すだけなら次のコマンド

$git revert <commit> -n
or
$git revert <commit> --no-commit

数個分のcommitをrevertしてcommitしてpush!!

マージコミットのrevert

マージコミットを戻す場合、マージした2つのコミット(親)のうちどちらに戻すかを指定する。

-mオプションをつけて親を数字で指定(基本的に1か2)

$git show
commit ae2cc52245ccd67e0798acdc6afcd46756643ea1 (HEAD -> K, origin/K)
Merge: de1d774 a8b5b8f ←左から1,2

$git revert -m 1 <commitID>

Reset

コミットした内容を取り消す

コマンド

指定ファイルをステージングから削除

$git reset <file>

全てのファイルをステージングから削除

$git reset

現在のブランチを指定コミットに戻す

$git reset <commitID>

コミットのみ取り消す

$git reset --soft <commitID>
// 直前のコミットを取り消す場合
git reset --soft HEAD^

コミット内容も全て取り消す

コミット内容、ステージングエリアへの移動も取り消す

$git reset --hard <commitID>
// 直前のコミットを取り消す場合
$git reset --hard HEAD^

間違ってresetして事故った時"reflog"

間違ってresetしちゃった時に元に戻す方法

// reflogで過去のコミット履歴を見れる
$git reflog
de1d774 (HEAD -> L) HEAD@{0}: reset: moving to HEAD@{18}
af31ecc HEAD@{1}: reset: moving to HEAD@{0}
af31ecc HEAD@{2}: reset: moving to HEAD^
eb5bff0 HEAD@{3}: reset: moving to HEAD^
5f19704 HEAD@{4}: reset: moving to HEAD^
6df3f5d HEAD@{5}: reset: moving to HEAD^
af3c6bb (origin/test2) HEAD@{6}: reset: moving to HEAD^
cce35a4 HEAD@{7}: reset: moving to HEAD^
c5b101f HEAD@{8}: reset: moving to HEAD^
3b36f82 HEAD@{9}: reset: moving to HEAD^
5c91984 HEAD@{10}: reset: moving to HEAD^
67c1344 HEAD@{11}: reset: moving to HEAD^
11b1153 HEAD@{12}: reset: moving to HEAD^
15ba5c9 HEAD@{13}: reset: moving to HEAD^ // ←ここらへんからresetしまくってる

// 15ba5c9のコミット時点に戻りたい場合
$git reset --soft HEAD@{13}

reflog、正しくは"参照"した履歴を見れる。
ブランチ移動・削除・名前変更、stash、mergeとかとか。

他のコマンド

変更を元に戻す

//1つのファイル
git checkout {ファイル名}

//全ファイル
git checkout .

差分表示

git diff

不要なブランチ削除

git branch -D {ブランチ名}
2
4
0

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
2
4