close
拜讀完保哥的大作 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
文章標籤
全站熱搜
留言列表