my syntax suger

i have an unbeknown dictionary. everything is up to me.

Gitメモ

覚えておく頭の余裕が無いが、時折必要となるGit操作の為のただのメモ。

コミットメッセージの修正

push前の場合

git commit -m "xxx"
git commit --amend -m "yyy"

push済の場合

git log --oneline
git rebase -i HEAD~3 # 戻したいcommit SHA-1の位置を指定。"pick"を"edit"へ変更。
git commit --amend # コミットメッセージを変更。
git rebase --continue
git push -f origin {branch}

push前のcommitを確認する

git log origin/hotfix/fix_xxx..hotfix/fix_xxx

push前のcommitを取り消す (local)

git reset --soft[hard] HEAD^
  • soft: commitだけを取り消してstaged changesへ変更点を戻す。
  • hard: commitを取り消してworking directoryの変更点も全て戻す。

ファイルの変更を取り消して最後のcommit状態に戻す。

git checkout HEAD -- /path/to/file

push済のcommitを上書きして取り消す

git revert {commit_sha}

ここで指定したcommitの直後のcommitは取り消されない。

git log --oneline --graph --decorate
* aaaaaaa (HEAD -> xxx, origin/xxx) add: aaa
* bbbbbbb add: bbb
* ccccccc add: ccc

つまり bbbbbbb を指定してrevertしたとすると aaaaaaa は残ったままである。

branch名変更 (remote)

  • xxx: before
  • yyy: after
git push -u origin feature/xxx
git branch -m feature/xxx feature/yyy
git push origin feature/yyy

cache削除

# clean cache only file
git rm --cached {FILE_NAME}

# clean under current directory
git rm -r --cached .

localにおける変更をcommit対象としない

# assume
git update-index --assume-unchanged {FILE_NAME}

# no assume
git update-index --no-assume-unchanged {FILE_NAME}

branch間の差分確認

file差分

git diff {x_branch} {y_branch}

commit差分

git log --no-merges master..feature/xxx
commit xx (origin/feature/xxx, feature/xxx)
Author: xxx <xxx@xxx.com>
Date:   Wed Jan 23 13:09:47 2018 +0900

    xxx

commit xx (origin/feature/xxx, feature/xxx)
Author: xxx <xxx@xxx.com>
Date:   Mon Jan 21 13:35:33 2018 +0900

    xxx

stash操作

stash

git stash save

# changed content
git stash list -p
git stash show <stash名>
# git stash show stash@{0}

取り出し

git stash apply stash@{0}
git stash drop {want to remove stash_name}

特定のcommitからbranchを切る

単純にcommitをcheckoutしてbranchを切ろうすると invalid branch name: HEAD となる。現ブランチが存在しないからである。

git checkout {commit_sha}

git status
HEAD detached at {commit_sha}
nothing to commit, working tree clean

git branch -m feature/xxx
fatal: Invalid branch name: 'HEAD'

checkout時にbranch名を指定してcheckoutする。

git checkout {commit_sha} -b feature/xxx

Tag打ち

# 最新commitからtag打ち
git tag -a {tag_name} -m 'create tag'

# tag list
git tag

# tag show
git show {tag_name}

# 全tag push
git push origin --tags