第一課簡單介紹到可以順利做一次commit 提交,但是如果想要在各個版本飛來飛去怎麼辦哩? 下面這些指令和觀念可以讓 git 的操作更順利而完善! 這部分補起來才有出了新手村的感覺...XD
一、查看狀態相關的指令
$ git status //目前所有檔案的追蹤情形(通常用來看未被追蹤的檔案) $ git log $ git log --all //以新到舊的順序列出儲存庫的提交的歷史記錄 $ git show //顯示該標先說明以及同時 commit 的資料 $ git diff //比較 working tree 跟 staging area $ git diff --cached //比較 staging area 跟本來的 repo $ git diff HEAD //比較 working tree 跟本來的 repo origin_repo : 上一次commit的版本 working tree : 正在修改尚未add的版本 staging area : 被add的版本會到staging area $ git commit --amend //改變最後一次的 Commit 的訊息
二、常用的還原指令:Reset、Checkout、Revert
1. Reset
$ git reset --hard HEAD
//回復至最近一次commit
[補充] 刪除新加的檔案
Reset 後不會刪除新加的檔案,因為新加的檔案是 untracked files,使用以下指令刪除多的檔案。
git clean -f
2. Checkout
$ git checkout branch-name //切換到 branch-name $ git checkout master //切換到 master $ git checkout -b newbranch //由現在的環境為基礎, 建立新的 branch $ git checkout HEAD~n $ git checkout xxxx //切換到HEAD前n版本 / xxxx commit 的版本 $ git checkout filename //還原檔案到 Repository 狀態
3. Revert
$ git revert e37c75787 $ git revert HEAD^ //新增一筆 commit 來做還原,將指定的版本新增為最新的commit
[用心去感覺] 檔案狀態的轉換
注意這裡觀念要清楚的話,要知道自己在哪一個狀態,再附上一次狀態圖,這個網站有詳細的觀念解說 (https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/summary)。
下面是一個表格整理,commit-level 後面是跟著 branch 名或是某個 commit 的編號,file-level 後面則是跟著filename。
Command | Scope | Common use cases |
---|---|---|
git reset | Commit-level | Discard commits in a private branch or throw away uncommited changes |
git reset | File-level | Unstage a file |
git checkout | Commit-level | Switch between branches or inspect old snapshots |
git checkout | File-level | Discard changes in the working directory |
git revert | Commit-level | Undo commits in a public branch |
git revert | File-level | (N/A) |
四、畫出漂亮的 branch graph
很羨慕一些圖形化的git有branch的樹狀圖可以看,後來發現terminal就能畫了~ 把下面的 aliases 加到 ~/.gitconfig file,之後就可以用 git lg 和 git lg2 畫圖囉!
[alias] lg1 = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all lg = !"git lg1"
References
魚乾的筆記本 : git還原 - revert, reset, checkout
http://fishjerky.blogspot.tw/2011/10/git.html
Git 初學筆記 - 指令操作教學
http://blog.longwin.com.tw/2009/05/git-learn-initial-command-2009/
StackOverflow - Pretty git branch graphs
http://stackoverflow.com/questions/1057564/pretty-git-branch-graphs
Reset, Checkout, and Revert
https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/commit-level-operations
沒有留言:
張貼留言