拜讀完保哥的大作 30 天精通 Git 版本控管 後

本來對Git矇懞懂懂

突然有豁然開朗的感覺XD

推薦大家也去整個看一遍

絕對是獲益良多

 

以下筆記當中提到的常用指令,紅色是我較常用指令

 
查看個別commit log
git log
 
查看本地狀態
git status
 
新增要上傳的檔案
git add res/values/strings.xml
 
Commit要上傳的檔案
git commit
 
復原指定檔案
git checkout [filename]
 
把code回復到指定patch
git reset 版號 --hard
 
重置目前的工作目錄
git reset
 
如果想把工作目錄也給還原到目前的最新版
git reset --hard
 
查看所有分支
git branch
 
建立分支,但目前工作目錄維持在自己的分支
git branch [BranchName]
 
建立分支,並將目前工作目錄切換到新的分支
git checkout -b [BranchName]
 
切換分支
git checkout [branch_name]
 
合併分支
git merge [另一個分支]
 
刪除分支
git branch -d [feature_name]
git branch -D [feature_name]
 
救回誤刪的分支
git branch [feature_name] <SHA1>
 
拿「工作目錄」與「索引」進行比對
git diff
 
拿「工作目錄」與「當前分支的最新版」進行比對
git diff HEAD
 
拿「當前的索引狀態」與「當前分支的最新版」進行比對
git diff --cached HEAD
 
拿「最新版的前一版」與「最新版」進行比對
git diff HEAD^ HEAD
 
看commit 物件的內容
git cat-file -p [commitid]
 
查看歷史commit log
git log --graph --oneline -a
 
取得較為精簡的歷史紀錄
git log --pretty=oneline --abbrev-commit
 
取得該版本的變更紀錄
git show [commitid]
 
建立較為正式的參照名稱
git update-ref refs/[name] [object_id]
 
顯示所有參照的方式
git show-ref
 
把任意「參考名稱」或「相對名稱」解析出「絕對名稱」
git rev-parse master
git rev-parse HEAD
git rev-parse HEAD^
 
把改寫到一半的那些檔案建立一個「暫存版」
git stash
 
把改寫到一半的那些檔案建立一個「暫存版」(包含 untracked 檔案)
git stash -u
 
列出目前所有的 stash 清單
git stash list
 
取回暫存版本
git stash pop
git stash pop "stash@{id}"     
 
取回版本 (其實是執行合併動作) 後,該暫存版還會留在 stash 清單上
git stash apply
git stash apply [stash_id]
 
刪除版本
git stash drop "stash@{1}"
 
刪除所有版本
git stash clear
 
 

 
顯示每個版本完整的commit內容
git log -g
 
列印出所有「歷史紀錄」的版本變化
git reflog
 
復原變更
git reset HEAD@{1} --hard (HEAD@{1}由git reflog得到)
 
 

 
 
找出衝突的檔案 (?)
git ls-files -u
 
比對檔案差異
git diff [filepath]
 
 

 
刪除最近一次的版本紀錄,該版本紀錄更動的檔案也會一併被復原
git reset --hard "HEAD^"
 
刪除最近一次的版本紀錄,但留下最後一次版本變更的異動內容
git reset --soft "HEAD^"
 
還原到上一個動作
git reset --hard ORIG_HEAD
 
把目前紀錄在索引中的變更檔案,全部添加到當前最新版之中
git commit --amend
 
列出此次 log 有哪些檔案被修改
git log --name-only
 
 

 
除了更新索引檔之外,連工作目錄下的檔案也會一併被刪除
git rm [file_name]
 
若你只想刪除索引檔中的該檔,又要保留工作目錄下的實體檔案
git rm --cached [file_name]
 
將檔案更名,執行此命令會同時更新索引與變更工作目錄下的實體檔案
git mv [old_name] [new_name]
 
 

 
把某個版本的變更給「還原」
git revert [commit_id]
 
把某個版本的變更給「還原」,但不執行 commit 動作
git revert -n [commit_id]
 
 

 
還原到前一個版本
git reset --hard "HEAD~1"
 
手動挑出」想套用的變更,且直接建立版本
git cherry-pick [commit_id]
 
手動挑出」想套用的變更,且在建立版本前先編輯訊息
git cherry-pick [commit_id] -e
 
手動挑出」想套用的變更,log會自動加上 (cherry picked from commit [commit_id]) 的訊息
git cherry-pick [commit_id] -x
 
手動挑出」想套用的變更,且不自動建立版本
git cherry-pick [commit_id] -n
 
 

 
把另外一個分支的變更,當成我這個分支的基礎
git rebase master
 
rebase完需要合併
git merge branch1
 
rebase完需要合併,不使用fast forward(graph 較好)
git merge branch1 --no-ff
 
 

 
透過 git clone 取得遠端儲存庫,再建立版本後上傳
 
     把本地儲存庫上傳到 GitHub 上的遠端儲存庫(遠端為empty)
     git push -u origin master
 
     把本地儲存庫上傳到 GitHub 上的遠端儲存庫(遠端為 initialized)
     git push origin master
 
直接將現有的本地 Git 儲存庫上傳到指定的 GitHub 專案
 
     若遠端為empty
     git remote add origin https://github.com/doggy8088/sandbox-empty2.git
     git push -u origin master
 
     若遠端為initialized
     git pull origin master
     git push -u origin master
 

 
建立共用儲存庫
git init --bare
 
將遠端儲存庫複製到本地
git clone [repo_url] [dir]
 

 
將所有branch都推送上去
git push --all
 
將所有tag都推送上去
git push --tags
 
也列出遠端的所有branch
git branch -a
 
將該分支推送到遠端
git push origin hotfix/bugs_in_membership
 

 
取得版本庫中所有人的 commit 次數統計
git shortlog -sne
 
顯示出每個人最近 commit 過的歷史紀錄
git shortlog
 
刪除遠端分支
git push origin :FixForCRLF
git push origin --delete FixForCRLF
 
最後一次修改此行的作者
git blame [filename]
git blame -L [開始行數],[結束行數] [filename]
     ex. git blame -L 4, Models/Product.cs
 
 

 
合併指定的 branch 到目前的 branch 但是不會產生合併的 commit
git merge branch名稱 --no-commit
arrow
arrow
    文章標籤
    Git 版本控制
    全站熱搜
    創作者介紹
    創作者 Louis Huang 的頭像
    Louis Huang

    Louis的工作筆記

    Louis Huang 發表在 痞客邦 留言(0) 人氣()