Forcibly cleaning everything including the directory, to make it clean again:
強行清除所有未 commit 的內容:
強行清除所有未 commit 的內容:
git clean -fd
git clean -nd (n is for preview, you can also use i for interactive)
Update everything from server
由 Server 取得更新:
由 Server 取得更新:
git pull (--all)
Force manually update things from server
以 server 內容取代本機的內容:
以 server 內容取代本機的內容:
git fetch
git reset --hard HEAD
----
放一個檔案去 Staged Area
# stage a file to staged area (a.k.a. add)
git add <filename>
git add -p <filename> #support --patch
反向操作
# unstage a file from staged area
git reset <filename>
git reset -p <filename> #support --patch
----
Reverting all changes to the latest commit, a.k.a. HEAD (discard changes) (for specific file, git checkout file is fine)
強行返回上一個 commit
強行返回上一個 commit
git reset --hard HEAD
Move HEAD to previous commit
將 HEAD 指回上一個 commit
將 HEAD 指回上一個 commit
git reset --hard HEAD~1 #delete everything not committed.
git reset --soft HEAD~1 #keep unstaged things unchanged, combine HEAD~1 things and staged things to staged area
git reset --mixed HEAD~1 #(default) put all (HEAD~1 things, staged things and unstaged things) to unstaged area
Graphical Explanation: https://dotblogs.com.tw/wasichris/2016/04/29/225157
Move HEAD to specific commit
將 HEAD 移到某一個 commit
將 HEAD 移到某一個 commit
git reset --hard 0d1d7fc32
#regret about the reset changes
git reflog # to list all history
git reset --hard HEAD@{5} # to reset back to original HEAD (use HEAD 5 as example)
# reverting single file to latest commit
git checkout -- filename
----
Save temporary changes without commit, then display clean workspace. (a.k.a. "store/hide something secretly somewhere")
暫存未 commit 的內容到 stash 中
暫存未 commit 的內容到 stash 中
git stash
git stash -p #support --patch
Stash only staged files
git add app/controllers/cart_controller.php
git stash --keep-index
git reset
Restore (without popping out)
git stash apply (--index <?>)
Pop out
git stash pop
-----
Check out a remote branch as a local branch
開一個 local 分支,內容是 remote 分支:
開一個 local 分支,內容是 remote 分支:
git checkout -b LocalName origin/remotebranchname
----
# rewrite history (change previous commits)
git rebase -i HEAD~3 # use last 3 commits as an example
# rewrite history (amend last commit)
git commit --amend
# go back to previous commit (with a new commit)
git revert --no-commit 0766c053..HEAD
git commit
# move HEAD to previous commit then push to server
# (note: it rewrites history, generally not good, git revert might be better)
git reset --hard 0d1d7fc32
git push --force
----
# rename local branch / remote branch
git branch -m <old_name> OR
git branch -m <old_name> <new_name> OR
git push origin :<old-name> <new-name> (delete remote old-name branch and push local new-name branch)
# remove / delete local branch
git branch -d <branch name>
# remove / delete remote branch
git push <remote_name> --delete <branch_name>
git push <remote_name> :<branch_name>
#force update the remote branch list
git remote update origin --prune OR
git pull -p
# force push the local branch to remote (ignoring the remote status)
git push origin --force
----
# show abbreviated commit hash (short hash)
git log -1 --abbrev-commit
# remove all branches named with chriz.chow
git branch -r --list "*chriz.chow*" | sed 's/origin\///' | xargs git push origin --delete