GitHub ==> 一套線上版本控管服務
以下紀錄一些相關的學習網址:
Git 教學(1) : Git 的基本使用
30 天精通 Git 版本控管 (01):認識 Git 版本控管 - iT邦幫忙::IT知識分享社群
連猴子都能懂得Git入門指南
GitBook
Git
Git - Book
Code School - Try Git
GitHub - GitHub初體驗
GitHub 官網
常用指令:
git init 建立Repository
git init --bare 建立Repository(裸)
git clone [REPO_URL] 建立副本Repository
git clone [repo_url] [dir] 建立副本Repository 到目的 Dir
git add . 目錄下所有檔案加入到 Git 版本控管(儲存庫)
git add -u 可以僅將「更新」或「刪除」的檔案變更寫入到「索引檔」中
git rm 刪除檔案
git mv 更名 搬動檔案
git reset 重設工作目錄的索引狀態
git reset --hard 重設工作目錄的索引狀態,還原到目前的最新版
git reset --hard HEAD (版本尚未被成功合併)
git reset --hard ORIG_HEAD 重設工作目錄的索引狀態,還原到之前最新的版本(回到合併前)
git reset --soft "HEAD^" 「刪除最近一次的版本紀錄,但留下最後一次版本變更的異動內容」
git reset HEAD@{1} --hard 我們如果想要「取消」最近一次的版本紀錄
git status 查詢當前工作目錄的詳細狀態(儲存庫狀態--目前最新版 與 索引檔 之間的差異)
git status -s 查詢當前工作目錄的詳細狀態(簡)
git checkout master [fileName] 還原檔案
git commit 將新增/修改/刪除 提交 建立版本(版本資訊寫入到「物件儲存區」當中)
git commit -m "說明文字" 將新增/修改/刪除 提交 並附加訊息
git commit --amend 重新提交一次最後一個版本 (即 HEAD 版本)
git help [command] 查詢help文件
git log 查詢版本的歷史紀錄
git log -10 查詢版本的歷史紀錄,只查最新的10筆
git ls-files 列出所有目前已經儲存在「索引檔」中的檔案路徑
git ls-files -u 列出所有目前已經儲存在「索引檔」中的檔案路徑(所有已追蹤或未追蹤的檔案)
git gc 執行重新封(repacking)
git fsck 檢查 Git 維護的檔案系統是否完整
git diff 比對的是「工作目錄」與「索引」之間的差異(執行git add . 之前)
git diff [commitOId] 比對的是「工作目錄」與「指定 commit 物件裡的那個 tree 物件」
git diff HEAD 拿「工作目錄」與「當前分支的最新版」比對。不會去比對「索引」的狀態
git diff [oldCOId] [newCOId] 比較 commit Object,可以跳過「索引」與「工作目錄」的任何變更(比對tree 物件)
git diff --cached 等待被 commit 的檔案,按Q可離開,同 git diff --cached HEAD
git diff --cached [commitOId] 比對「當前的索引狀態」與「指定 commit 物件裡的那個 tree 物件」
git diff --cached HEAD 「當前的索引狀態」與「當前分支的最新版」比對。不會比對「工作目錄」的檔案內容
git diff --staged 等待被 commit 的檔案,按Q可離開,同 git diff --cached
git diff HEAD^ HEAD 比較【最新版的前一版】與【最新版】之間的差異
git push 合併/推送 至遠端 Repository
git push originRef masterRef
git push -u origin master 本地推送到遠端,GitHub 上的遠端儲存庫是完全空的 需下-u 參數
git push --set-upstream 加上 --set-upstream 參數 即可將本地分支註冊進 .git\config 設定檔
git push --all
git push --tags
git remote add [tag] [URL] 添加遠地參照(reftag)
git remote -v 可列出目前註冊在工作目錄裡的遠端儲存庫資訊(列出 origin 資訊)
git remote set-url origin git@github.com:doggy8088/frontend-tools.git 重設 origin 對應 url
git pull 合併/推送 至本地 Repository
git pull origin master
git fetch --all --tags
git fetch 將遠端儲存庫的最新版下載回來,下載的內容包含完整的物件儲存庫(object storage)
git ls-remote
git ls-remote origin 可列出所有遠端分支
git branch 顯示分支結構
git branch -a 顯示出所有「本地分支」與「本地追蹤分支」。
git branch -d [BranchName] 刪除分支
git branch -D [BranchName] 刪除沒有執行過「合併」的分支
git branch -r 顯示出【遠端分支】。
git branch [BranchName] 建立分支,但目前工作目錄維持在自己的分支
git checkout -b [BranchName] 建立分支,並將目前工作目錄切換到新的分支
git checkout [BranchName] 切換分支,工作目錄切換到其他分支
git cat-file -p commitOId 查看 commit 物件的內容
git cat-file -p treeid 查看 tree 物件的內容
git log --pretty=oneline 取得較為精簡的歷史紀錄(含commit Object ID及commit message)
git log --pretty=oneline --abbrev-commit 取得較為精簡的歷史紀錄(含commit Object ID及commit message)
git show 取得版本變更紀錄
git update-ref refName [oId] 自由建立「一般參照」,參照名稱可以指向任意 Git 物件,沒有限定非要commit物件不可。
git update-ref -d refName 刪除參照
git show-ref [ref or object_id] 顯示所有參照
git symbolic-ref 若要建立與刪除「符號參照」
git rev-parse 可以把任意「參考名稱」或「相對名稱」解析出「絕對名稱」ex:git rev-parse HEAD^
git stash 會將所有已列入追蹤(tracked)的檔案建立暫存版 同 git stash save
git stash -u 會包括所有已追蹤或未追蹤的檔案,全部都建立成暫存版
git stash pop 將 stash 暫存版本合併回主要版本
git stash list 列出目前所有的 stash 清單
git stash save -u
git stash apply 將 stash 暫存版本合併回主要版本,但不清除stash資訊
git stash apply "stash@{1}" 取回「特定一個暫存版」
git stash drop "stash@{1}" 將特定暫存版刪除。
git stash clear 將全部暫存版刪除
git config --list 列出目前設定在 Git for Windows 工具下的所有選項
git config --list --system 篩選出關於系統層級的選項設定
git config --list --global 篩選出關於使用者層級的選項設定
git config --list --local 篩選出關於儲存區層級的選項設定
git config [config_section.config_name] 取得特定選項值 ex:git config user.name
git config --unset --system [config_section.config_name] 刪除特定選項設定
git config --edit --system 直接編輯設定檔
git config --global core.autocrlf true 自動辨識 CRLF 字元
git config --global help.autocorrec 自動訂正打錯的參數
git config --system color.ui auto 啟用訊息顏色
git config --local commit.template "G:\git-commit-template.txt" 自訂 commit 訊息範本(儲存庫層級)
git tag 列出所有標籤:
git tag [tagname] 建立輕量標籤
git tag [tagname] -d 刪除輕量標籤
git cat-file -t [tagname] 查看「輕量標籤」的內容
git tag [tagname] -a 建立標示標籤,需加入 -m
git reflog 印出所有「歷史紀錄」的版本變化
git reflog delete ref@{specifier} 刪除之前紀錄的某些紀錄
git merge [branchName] 執行合併
git merge [branchName] --no-ff 執行合併 停用 Git 的快轉機制
git merge origin/master
git config gc.reflogExpire 修改reflog預設的過期期限
ex:git config --global gc.reflogExpire "never"
git config gc.reflogExpireUnreachable 修改預設reflog的過期期限
ex:git config --global gc.reflogExpireUnreachable "7 days"
git reflog expire --expire=now --all 立即清除所有歷史紀錄
git revert [commit object id] 還原某一個版本的紀錄(某個版本的變更,透過「相反」的步驟把變更給還原)
git revert -n 使用 git revert 命令套用變更,但不執行 commit 動作
git revert --continue 代表你已經完成所有操作,並且建立一個新版本,就跟執行 git commit 一樣。
git revert --abort 代表你準備放棄這次復原的動作,執行這個命令會讓所有變更狀態還原,也就是刪除的檔案又會被加回來。
git revert [commit_id] -s 在訊息內容加上目前使用者的簽署名稱
git revert [commit_id] -e 在完成版本之前顯示編輯訊息的視窗
git cherry-pick [commit_id] 「手動挑出」你想套用的變更
git cherry-pick [commit_id] -e 「手動挑出」你想套用的變更 建立版本前先編輯訊息
git cherry-pick [commit_id] -n 「手動挑出」你想套用的變更 不建立版本 僅套用變更
git cherry-pick [commit_id] -x 「手動挑出」你想套用的變更 並加註由哪個分支過來的訊息
git log [branchName] 查詢分支的紀錄
git rebase -i [commit_id]
git rebase ---continue
git config --global push.default simple
Git 的預設行為將會在 Git 2.0 之後發生改變,建議你透過設定 push.default 選項的方式明確指定 push 的方法
git shortlog -sne 取得版本庫中所有人的 commit 次數統,-n 參數還可以按照 commit 數量進行降冪排序
git shortlog 顯示出每個人最近 commit 過的歷史紀錄
git clean -n 從工作目錄清除不在版本庫中的檔案
git push origin :branchName 刪除遠端分支 同 git push origin --delete branchName
git blame 找出改壞程式的兇手
git blame [filename]
git blame -L [開始行數],[結束行數] [filename]
PS.
「目錄資訊」/「檔案內容」,即為 tree 物件與 blob 物件
blob 物件就是把原本的「檔案內容」當成 blob 檔案的內容 (blob 物件其實就是一個實體檔案)
--blob 物件就是只有內容的檔案,檔名是由內容產生
tree 物件,則是用來儲存特定資料夾下包含哪些檔案,以及該檔案對應的 blob 物件的檔名為何。
在 tree 物件中,除了可以包含 blob 物件的檔名與相關資訊,還可以包含其他的 tree 物件。所以
--tree 物件其實就是「資料夾」的代名詞
參照:
30 天精通 Git 版本控管 (05):了解儲存庫、工作目錄、物件與索引之間的關係
http://ithelp.ithome.com.tw/question/10133653
常見的 git 屬性範例:
0100000000000000 (040000): Directory
1000000110100100 (100644): Regular non-executable file
1000000110110100 (100664): Regular non-executable group-writeable file
1000000111101101 (100755): Regular executable file
1010000000000000 (120000): Symbolic link
1110000000000000 (160000): Gitlink
git diff 說明
git diff => 工作目錄 vs 索引
git diff HEAD => 工作目錄 vs HEAD
git diff --cached HEAD => 索引 vs HEAD
git diff --cached => 索引 vs HEAD
git diff HEAD^ HEAD => HEAD^ vs HEAD
Git 參照名稱又有區分「一般參照」與「符號參照」,兩者的用途一模一樣,只在於內
容不太一樣。「符號參照」會指向另一個「一般參照」,而「一般參照」則是指向一個
Git 物件的「絕對名稱」。
我們手邊改到一半的檔案,可能會有以下狀態:
* 新增檔案 (尚未列入追蹤的檔案) (untracked files)
* 新增檔案 (已經加入索引的檔案) (tracked/staged files)
* 修改檔案 (尚未加入索引的檔案) (tracked/unstaged files)
* 修改檔案 (已經加入索引的檔案) (tracked/staged files)
* 刪除檔案 (尚未加入索引的檔案) (tracked/unstaged files)
* 刪除檔案 (已經加入索引的檔案) (tracked/staged files)
救回誤刪的分支
1. 先利用 git reflog 找出該分支(最後一個版本的 object id (也就是 SHA1 格式的物件絕對名稱)
2. 執行 git branch feature
在 Git 裡面,是透過 .gitignore 檔案來進行定義「忽略清單」,主要的目的是排除一些
不需要加入版控的檔案,列在裡面的檔名或路徑 (可包含萬用字元),都不會出現在
git status 的結果中,自然也不會在執行 git add 的時候被加入。不過,這僅限於
Untracked file 而已,那些已經列入版控的檔案 (Staged file),不受 .gitignore
檔案控制。
使用git rebase 如果你的分支是從遠端儲存庫下載回來的,請千萬不要透過 Rebase 修
改版本歷史紀錄,否則你將會無法將修改過後的版本送到遠端儲存庫!
Rebase 能做的事
1. 調換 commit 的順序
2. 修改 commit 的訊息
3. 插入一個 commit
4. 編輯一個 commit
5. 拆解一個 commit
6. 壓縮一個 commit,且保留訊息紀錄
7. 壓縮一個 commit,但丟棄版本紀錄
8. 刪除一個 commit
將遠端儲存庫的 master 分支取回,並合併到本地儲存庫的 master 分支,有兩種方法:
1. 使用 git pull origin master 指令
git pull 指令幫我們一次做到 git fetch 與 git merge origin/master 這個動作
2. 使用 git fetch 指令後再執行 git merge origin/master 合併動作
轉換Subversion to GIT
http://ithelp.ithome.com.tw/question/10140481
第一次使用 GitHub for Windows 工具的時候,如果你有照著步驟登入與設定,這套工具會
預設幫你產生一對金鑰,然後該工具會自動上傳到 GitHub 的 SSH Key 專區,讓你日後不用
再輸入帳號密碼,就能順利的操作 GitHub 上的遠端儲存庫。
這一對金鑰,預設就放在 %USERPROFILE%\.ssh 資料夾下,如果你的 Windows 登入使用者名
稱為 Will 的話,這個路徑就位於 C:\Users\Will\.ssh 目錄下。這對金鑰的檔名分別是
github_rsa (私鑰) 與 github_rsa.pub (公鑰)
http://goo.gl/43teXM
注意事項
由 project/.git/config 可知當前Config
origin(remote) 是 Repository 的版本
master(branch) 是 local 端, 正在修改的版本
平常沒事不要去動到 origin, 如果動到, 可用 git reset --hard 回覆到沒修改的狀態.
Config - 環境設定
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
複製代碼
因為初次未設定,從 git config --list 會找不到該參數名,所以列上
git config --global --unset user.name # 移除KEY
複製代碼
Remote - 遠端設定
git remote -v # 列出remote origin info
複製代碼
git remote add origin git://new.url.here # 新增遠端repository URL
複製代碼
git remote set-url origin git://new.url.here # 更改遠端repository URL
複製代碼
git remote set-url --add --push origin git://backup.url.here # 新增Push的repository URL (manipulate push URLs)
複製代碼
Pull - 從遠端更新
git pull 或 git pull origin master
複製代碼
實際作用是先 git fetch 遠端的 branch,然後與本地端的 branch 做 merge,產生一個 merge commit 節點
所謂的”遠端”預設叫做origin,當你有多個不同遠端伺服器時,就會取不同名子了。
Push - 將 Commit 送出去
git push 或 git push origin master
複製代碼
實際的作用是將本地端的 master branch 與遠端的 master branch 作 fast-forward 合併。如果出現 [rejected] 錯誤的話,表示你必須先作 pull。
git push origin +HEAD
git push origin +HEAD:{brach} // 適用於搭配reset刪除遠端commit
複製代碼
Git 新增檔案git add . # 將資料先暫存到 staging area, add 之後再新增的資料, 於此次 commit 不會含在裡面.
git add filename
git add modify-file # 修改過的檔案, 也要 add. (不然 commit 要加上 -a 的參數)
git add -u # 只加修改過的檔案, 新增的檔案不加入.
git add -i # 進入互動模式
Git 刪除檔案
git rm filename
Git 修改檔名、搬移目錄
git mv filename new-filename
Git status 看目前的狀態
git status # 看目前檔案的狀態
Git Commit
git commit
git commit -m 'commit message'
git commit -a -m 'commit -message' # 將所有修改過得檔案都 commit, 但是 新增的檔案 還是得要先 add.
git commit -a -v # -v 可以看到檔案哪些內容有被更改, -a 把所有修改的檔案都 commit
Git 產生新的 branch
git branch # 列出目前有多少 branch
git branch new-branch # 產生新的 branch (名稱: new-branch), 若沒有特別指定, 會由目前所在的 branch / master 直接複製一份.
git branch new-branch master # 由 master 產生新的 branch(new-branch)
git branch new-branch v1 # 由 tag(v1) 產生新的 branch(new-branch)
git branch -d new-branch # 刪除 new-branch
git branch -D new-branch # 強制刪除 new-branch
git checkout -b new-branch test # 產生新的 branch, 並同時切換過去 new-branch
# 與 remote repository 有關
git branch -r # 列出所有 remote repository branch
git branch -a # 列出所有 branch
Git checkout 切換 branch
git checkout branch-name # 切換到 branch-name
git checkout master # 切換到 master
git checkout -b new-branch master # 從 master 建立新的 new-branch, 並同時切換過去 new-branch
git checkout -b newbranch # 由現在的環境為基礎, 建立新的 branch
git checkout -b newbranch origin # 於 origin 的基礎, 建立新的 branch
git checkout filename # 還原檔案到 Repository 狀態
git checkout HEAD . # 將所有檔案都 checkout 出來(最後一次 commit 的版本), 注意, 若有修改的檔案都會被還原到上一版. (git checkout -f 亦可)
git checkout xxxx . # 將所有檔案都 checkout 出來(xxxx commit 的版本, xxxx 是 commit 的編號前四碼), 注意, 若有修改的檔案都會被還原到上一版.
git checkout -- * # 恢復到上一次 Commit 的狀態(* 改成檔名, 就可以只恢復那個檔案)
Git diff
git diff master # 與 Master 有哪些資料不同
git diff --cached # 比較 staging area 跟本來的 Repository
git diff tag1 tag2 # tag1, 與 tag2 的 diff
git diff tag1:file1 tag2:file2 # tag1, 與 tag2 的 file1, file2 的 diff
git diff # 比較 目前位置 與 staging area
git diff --cached # 比較 staging area 與 Repository 差異
git diff HEAD # 比較目前位置 與 Repository 差別
git diff new-branch # 比較目前位置 與 branch(new-branch) 的差別
git diff --stat
Git Tag
git tag v1 ebff # log 是 commit ebff810c461ad1924fc422fd1d01db23d858773b 的內容, 設定簡短好記得 Tag: v1
git tag 中文 ebff # tag 也可以下中文, 任何文字都可以
git tag -d 中文 # 把 tag=中文 刪掉
Git log
git log # 將所有 log 秀出
git log --all # 秀出所有的 log (含 branch)
git log -p # 將所有 log 和修改過得檔案內容列出
git log -p filename # 將此檔案的 commit log 和 修改檔案內容差異部份列出
git log --name-only # 列出此次 log 有哪些檔案被修改
git log --stat --summary # 查每個版本間的更動檔案和行數
git log filename # 這個檔案的所有 log
git log directory # 這個目錄的所有 log
git log -S'foo()' # log 裡面有 foo() 這字串的.
git log --no-merges # 不要秀出 merge 的 log
git log --since="2 weeks ago" # 最後這 2週的 log
git log --pretty=oneline # 秀 log 的方式
git log --pretty=short # 秀 log 的方式
git log --pretty=format:'%h was %an, %ar, message: %s'
git log --pretty=format:'%h : %s' --graph # 會有簡單的文字圖形化, 分支等.
git log --pretty=format:'%h : %s' --topo-order --graph # 依照主分支排序
git log --pretty=format:'%h : %s' --date-order --graph # 依照時間排序
Git show
git show ebff # 查 log 是 commit ebff810c461ad1924fc422fd1d01db23d858773b 的內容
git show v1 # 查 tag:v1 的修改內容
git show v1:test.txt # 查 tag:v1 的 test.txt 檔案修改內容
git show HEAD # 此版本修改的資料
git show HEAD^ # 前一版修改的資料
git show HEAD^^ # 前前一版修改的資料
git show HEAD~4 # 前前前前一版修改的資料
Git reset 還原
git reset --hard HEAD // 還原到最前面
git reset --hard HEAD^ // 還原到前一個commit
git reset --hard HEAD~3
git reset --soft HEAD~3
git reset HEAD filename // 從 staging area 狀態回到 unstaging 或 untracked (檔案內容並不會改變)
複製代碼
Git update-ref
git update-ref -d HEAD 刪除HEAD(適用取消首次commit)
Git grep
git grep "te" v1 # 查 v1 是否有 "te" 的字串
git grep "te" # 查現在版本是否有 "te" 的字串
Git stash 暫存
git stash # 丟進暫存區
git stash list # 列出所有暫存區的資料
git stash pop # 取出最新的一筆, 並移除.
git stash apply # 取出最新的一筆 stash 暫存資料. 但是 stash 資料不移除
git stash clear # 把 stash 都清掉
Git merge 合併
git merge
git merge master
git merge new-branch
下述轉載自: ihower 的 Git 版本控制系統(2) 開 branch 分支和操作遠端 repo.x
Straight merge 預設的合併模式,會有全部的被合併的 branch commits 記錄加上一個 merge-commit,看線圖會有兩條 Parents 線,並保留所有 commit log。
Squashed commit 壓縮成只有一個 merge-commit,不會有被合併的 log。SVN 的 merge 即是如此。
cherry-pick 只合併指定的 commit
rebase 變更 branch 的分支點:找到要合併的兩個 branch 的共同的祖先,然後先只用要被 merge 的 branch 來 commit 一遍,然後再用目前 branch 再 commit 上去。這方式僅適合還沒分享給別人的 local branch,因為等於砍掉重練 commit log。
指令操作
git merge
git merge --squash
git cherry-pick 321d76f # 只合併特定其中一個 commit。如果要合併多個,可以加上 -n 指令就不會先幫你 commit,這樣可以多 pick幾個要合併的 commit,最後再 git commit 即可。
Git blame
git blame filename # 關於此檔案的所有 commit 紀錄
Git 還原已被刪除的檔案
git ls-files -d # 查看已刪除的檔案
git ls-files -d | xargs git checkout -- # 將已刪除的檔案還原
Git 維護
git gc # 整理前和整理後的差異, 可由: git count-objects 看到.
git gc --prune
git fsck --full
Git revert 資料還原
git revert HEAD # 回到前一次 commit 的狀態
git revert HEAD^ # 回到前前一次 commit 的狀態
git reset HEAD filename # 從 staging area 狀態回到 unstaging 或 untracked (檔案內容並不會改變)
git checkout filename # 從 unstaging 狀態回到最初 Repository 的檔案(檔案內容變回修改前)
Git Rollback 還原到上一版
git reset --soft HEAD^
編輯 + git add filename
git commit -m 'rollback'
以下與 遠端 Repository 相關
Git remote breanch 維護遠端分支檔案
git remote
git remote add new-branch http://git.example.com.tw/project.git # 增加遠端 Repository 的 branch(origin -> project)
git remote show # 秀出現在有多少 Repository
git remote rm new-branch # 刪掉
git remote update # 更新所有 Repository branch
git branch -r # 列出所有 Repository branch
抓取 / 切換 Repository 的 branch
git fetch origin
git checkout --track -b reps-branch origin/reps-branch # 抓取 reps-branch, 並將此 branch 建立於 local 的 reps-branch
刪除 Repository 的 branch
git push origin :heads/reps-branch
============== Git的奇技淫巧:
http://goo.gl/lsC5hx
展示説明資訊
git help -g
回到遠端倉庫的狀態
拋棄本地倉庫的所有版本(commit),回到遠端倉庫的狀態。
git fetch --all && git reset --hard origin/master
重設第一個commit
也就是把所有的改動都重新放回工作區,並清空所有的commit,這樣就可以重新提交第一個commit了
git update-ref -d HEAD
展示工作區和暫存區的不同
輸出工作區和暫存區的different(不同)。
git diff
還可以展示本地倉庫中任意兩個commit之間的檔變動:
git diff
展示暫存區和最近版本的不同
輸出暫存區和本地最近的版本(commit)的different(不同)。
git diff --cached
展示暫存區、工作區和最近版本的不同
輸出工作區、暫存區 和本地最近的版本(commit)的different(不同)。
git diff HEAD
快速切換分支
git checkout -
刪除已經合併到master的分支
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d
展示所有的分支關聯的遠端倉庫
git branch -vv
關聯遠端分支
關聯之後,git branch -vv就可以展示關聯的遠端分支名了,同時推送到遠端倉庫直接:git push,不需要指定遠端倉庫了。
git branch -u origin/mybranch
或者在push時加上-u參數
git push origin/mybranch -u
刪除本地分支
git branch -d
刪除遠端分支
git push origin --delete
或者
git push origin :
查看標籤
git tag
展示當前分支的最近的tag
git describe --tags --abbrev=0
本地創建標籤
git tag
默認tag是打在最近的一次commit上,如果需要指定commit打tag:
$ git tag -a
推送標籤到遠程倉庫
首先要保證本地創建好了標籤才可以推送標籤到遠端倉庫:
git push origin
一次性推送所有標籤,同步到遠端倉庫:
git push origin --tags
刪除本地標籤
git tag -d
刪除遠程標籤
刪除遠端標籤需要先刪除本地標籤,再執行下面的命令
git push origin :refs/tags/
放棄工作區的修改
git checkout
放棄所有修改:
git checkout .
回到某一個commit的狀態,並重新增添一個commit
git revert
回到某個commit的狀態,並刪除後面的commit
和revert的區別:reset命令會抹去某個commit id之後的所有commit
git reset
修改上一個commit的描述
git commit --amend
查看commit歷史
git log
查看某段代碼是誰寫的
blame的意思為‘責怪’,你懂的。
git blame
顯示本地執行過git命令
就像shell的history一樣
git reflog
修改作者名
git commit --amend --author='Author Name
修改遠程倉庫的url
git remote set-url origin
列出所有遠端倉庫
git remote
列出本地和遠端分支
-a參數相當於:all
git branch -a
列出遠端分支
-r參數相當於:remote
git branch -r
查看兩個星期內的改動
git whatchanged --since='2 weeks ago'
把A分支的某一個commit,放到B分支上
這個過程需要cherry-pick命令,參考
git checkout
給git命令起別名
簡化命令
git config --global alias.
比如:git status 改成 git st,這樣可以簡化命令
git config --global alias.st status
存儲當前的修改,但不用提交commit
詳解可以參考廖雪峰老師的git教程
git stash
保存當前狀態,包括untracked的檔
untracked文件:新建的文件
git stash -u
展示所有stashes
git stash list
回到某個stash的狀態
git stash apply
回到最後一個stash的狀態,並刪除這個stash
git stash pop
刪除所有的stash
git stash clear
從stash中拿出某個檔的修改
git checkout
展示所有tracked的檔
git ls-files -t
展示所有untracked的檔
git ls-files --others
展示所有忽略的檔
git ls-files --others -i --exclude-standard
強制刪除untracked的檔
可以用來刪除新建的檔。如果不指定檔檔案名,則清空所有工作的untracked檔。clean命令,注意兩點:
1. clean後,刪除的檔無法找回 2. 不會影響tracked的檔的改動,只會刪除untracked的檔
git clean
強制刪除untracked的目錄
可以用來刪除新建的目錄,注意:這個命令也可以用來刪除untracked的檔。詳情見上一條
git clean
重命名分支
git branch -m
展示簡化的commit歷史
git log --pretty=oneline --graph --decorate --all
把某一個分支到匯出成一個檔
git bundle create
從包中導入分支
新建一個分支,分支內容就是上面git bundle create命令匯出的內容
git clone repo.bundle
執行rebase之前自動stash
git rebase --autostash
從遠端倉庫根據ID,拉下某一狀態,到本地分支
git fetch origin pull/
詳細展示一行中的修改
git diff --word-diff
清除gitignore檔中記錄的檔
git clean -X -f
展示所有alias和configs
git config --list
展示忽略的檔
git status --ignored
commit歷史中顯示Branch1有的,但是Branch2沒有commit
git log Branch1 ^Branch2
在commit log中顯示GPG簽名
git log --show-signature
刪除全域設置
git config --global --unset
新建並切換到新分支上,同時這個分支沒有任何commit
相當於保存修改,但是重寫commit歷史
git checkout --orphan
展示任意分支某一檔的內容
git show
clone下來指定的單一分支
git clone -b
創建並切換到該分支
git checkout -b
忽略檔的許可權變化
不再將檔的許可權變化視作改動
git config core.fileMode false
展示本地所有的分支的commit
最新的放在最上面
git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
在commit log中查找相關內容
通過grep查找,given-text:所需要查找的欄位
git log --all --grep='
把暫存區的指定file放到工作區中
git reset
強制推送
git push -f
增加遠程倉庫
git remote add origin
沒有留言 :
張貼留言