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}

commitを取り消す (local)

git reset --soft[hard] HEAD^

branch名変更 (remote)

git push -u origin feature/xxx
git branch -m feature/xxx feature/yyy
git push origin :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 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