配置個人資料
git config --global user.email william0760@qq.com
git config --global user.name "William Wen"
git config --list
生成公鑰SSH
安裝git,開啟Git Bash
ssh-keygen -t rsa -C "william0760@qq.com"
之後會生成id_rsa與id_rsa.pub
id_rsa.pub為公鑰,把它貼到託管網站(如github, git@OSC)
要注意託管程式碼需要使用SSH,不是HTTP
版本操作
git clone https://xxx : 提取遠端上的最新程式碼並初始化
git reset –mixed <commit_id>:此為預設方式,不帶任何引數的git reset,即時這種方式,它回退到某個版本,只保留原始碼,回退commit和index資訊
git reset –-soft <commit_id>:回退到某個版本,只回退了commit的資訊,不會恢復到index file一級。如果還要提交,直接commit即可
git reset –-hard <commit_id>:徹底回退到某個版本,本地的原始碼也會變為上一個版本的內容,無視所有commit
git checkout HEAD : 回滾最新的程式碼 (history > Working Directory)
git checkout xxx.php: 還原單個檔案 (history -> Working Directory)
git add -u : 把修改過的檔案加入index
git add -A : 把所有修改、新增、刪除 檔案變動加入index
git commit (stage -> history)
git commit -a -m "your message" (提交所有已經git add過的程式碼) (Working Directory -> history)
git commit --amend -m"your message" (你儲存得過於頻繁,可將此次的commit和上一次commit合併)
git fetch: 相當於是從遠端獲取最新版本到本地,不會自動merge
git fetch origin: 從“origin”資源庫取得所有的歷史記錄而不改變本地的副本.
git pull: 相當於是從遠端獲取最新版本並merge到本地副本
git push: 提交版本到遠端
git submodule update --init --recursive : 更新submodule,git pull不會自動下載submodule
git stash: 儲存當前改動並還原未改動狀態,通常用於程式碼修改中臨時切換分支
git stash pop: 恢復改動記錄
git archive --format zip -o code.zip HEAD: 匯出專案
分支操作
git checkout -b <name> 新建分支
git branch -D <name> 刪除分支
git branch 檢視本地分支
git branch -a 檢視遠端分支
git merge test 把test分支合併到當前分支上 (合併之後 git會在發生衝突的檔案上標出衝突 自己開啟這些檔案手工解決衝突 如果不解決不能commit)
git checkout test 切換到test分支 (history -> Working Directory)git rebase my_branch: 把my_branch分支合併到當前副本中
git push origin :master 刪除遠端master分支
查詢操作
git diff (當你了修改檔案並儲存了,使用這個命令觀察下)
git diff abcde (對位元定版本,至少版本號前5位)
git status (自己使用觀察下)
git log -p (當你修改了檔案,再使用git commit -m "XXX"時候,再用這個命令看看)
git log --stat --summary (包括檔案改動的摘要資訊)
git log --grep "search text" (搜尋匹配內容的LOG)
git log filename (某檔案所有修改記錄)
git log --author=<name> (某作者的記錄)
git branch 檢視分支
git show commit_id (檢視某次提交的修改細節)
git branch --contains <commit-id> 某個commit的所屬分支
Applying and creating patches
git apply xxxx.patch
git diff HEAD^^ > (issue id)-title.patch
git format-patch HEAD^^ --stdout > (issue id)-title.patch // 把上一次commit的內容轉為補丁
組合指令
對現有原始碼建立GIT庫
git init
git add --all ( or git add .)
git commit -m "init"
打包最近一次差異檔案(bash)
git archive -o latest.tar HEAD $(git diff HEAD^ --name-only)
或
git diff HEAD^ --name-only > __list.txt
cat __list.txt | xargs -i tar rvPf latest.tar {}
rm __list.txt
最近一次差異檔案提取 (powershell)
git diff HEAD^ > __list.txt --name-only
cat __list.txt | foreach {
$target = "/diff/"+$_
New-Item -type file -Force $target
cp $_ $target
}
rm __list.txt
合併另一個git庫
git remote add {project name} {git uri}
git remote -v
git fetch {project name}
git merge {project name}/master