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
----
Sometimes if you want to checkout a branch (e.g. dpp), but you also have a file called dpp.
When you run "git checkout dpp", Git does not know what operation you want.
When you run "git checkout dpp", Git does not know what operation you want.
To switch to dpp branch, you can run:
git switch dpp
To restore the dpp file, you can run:
git restore dpp
Alternatively, you can also add double-dash to indicate it is a file path:
git checkout dpp --