【轉】git命令彙總
一、Git版本分支管理
以下是一個比較基本的分支管理示範,每個公司的專案管理運作不同,分支管理也有各自的特色,但萬變不離其宗。
1) dev分支用於日常開發
2) 當有新版本需要釋出時,把dev程式碼合併到release分支做整合測試,並等待發布
3) release分支進入bug修復階段
4) 如果在release分支發現bug,那麼在release分支進行修改,並使用git cherry-pick把修復bug的commit合併到release分支上
(cherry-pick與merge不同,它的合併是以commit為單位而非整個branch)
完成後,release分支上所有程式碼改動(除版本號之外)都應該已經合到了dev分支上
5) release分支測試完成後,釋出到線上環境
6) 並且打上tag,合併到master分支上
7) 如果在線上出現bug,那麼在master上hot fix修復
8) 出現hot fix並修復後,需要重新把hot fix的程式碼合併到dev以及release分支中去使程式碼保持一致
二、Git基本命令彙總
1.檢視本地檔案狀態
git status —-檢視本地、本地倉庫、快取(stash)的檔案修改狀態
—紅色 代表本地工作空間的檔案修改
—藍色 代表提交到本地倉庫中的檔案(git add .)
2.切換版本/覆蓋當前修改檔案
git branch - 檢視當前版本
git branch -a 檢視所有版本
git checkout XXX(版本名) —-切換到遠端庫中XXX版本
git checkout filepath —覆蓋當前修改的檔案
git checkout . -覆蓋當前所有修改檔案
3.從遠端庫獲取最新程式碼
git remote -檢視遠端庫名稱
git remote -v
git remote show XXX(遠端庫名)
git fetch — 從remote端拉取最新程式碼
git pull XXX(遠端庫名) XXX(分支名) -把拉取的最新程式碼跟當前工作空間合併
git rebase —把遠端拉回的程式碼和本地合併
4.快取原生代碼
當要切換到其它版本時,想儲存在當前版本修改的檔案:在切換前做
git stash —-把本地修改過不需要提交的檔案放入快取
git checkout XXX(版本) —切換庫版本
切回原來的庫,把檔案從stash快取中拿出來
git stash pop — 從快取中拉出
5.提交遠端庫
git add .
git commit -m ''
git remote 檢視遠端關聯名稱
git push remote的名稱 本地master
6.處理衝突
git fetch 拉取最新工程
git pull XXX(遠端庫名) XXX(分支名) -把拉取的最新程式碼跟當前工作空間合併
衝突產生後,去工作空間修改後,>>>新程式碼===老程式碼<<<,保留最終程式碼,刪除提示符,重新提交。
7.把本次提交的內容提交到其他分支(比如釋出時bug的修改)
git cherry-pick commitId
8.建議執行順序
git status 檢視修改狀態
git checkout filename 放棄某檔案的修改。
git stash 儲存修改
git fetch 拉取最新工程
git rebase 與本地分支合併
git stash pop 彈出儲存檔案,此時新檔案可能會與你的檔案產生衝突,解決衝突。
git add filename 新增某個修改檔案
git add . 提交所有加點
git reset HEAD filename 回滾指定檔案,回滾所有加點:"git reset HEAD . "
git commit -m''
git push 本地remote遠端分支名,本地分支名
例我的本地分支為master 遠端remote 別名為 origin 則提交為git push origin master
9.切換HEAD
git reflog --檢視HEAD記錄
git reset --hard HEAD^ //切換到之前一個HEAD
git reset --hard fad4462 // 切換到某個已經回退的HEAD
10.刪除 local branch
git branch -d <branch_name>
11.gitignore 全域性配置忽略檔案
git config --global core.excludesfile ~/.gitignore
如果只針對某個專案起作用,也可以把.gitignore放在跟.project同一目錄下。
12.git log 格式化顯示
git log --pretty=oneline
git log --pretty="%h - %H - %an, %ar : %s"
git log --pretty="%h - %s"
git log -p 顯示每次提交的內容差異
git -log --stat 顯示簡要的增改行數統計
13.git stash暫存
git stash
git stash save -a 'msg'
git stash pop
git stash list
git stash apply [email protected]{id}
git stash drop [email protected]{id}
14.git reset回滾
--git reset --soft head^ 回退最近一次commit的檔案
--git add 提交到暫存區
--git reset HEAD <file> 把暫存區裡的檔案撤銷
--git reset --hard HEAD^ 把最近一次提交的檔案回滾並覆蓋
--git reset --hard <commit_id>
--git push -f
15.git 只合並分支上某個commit(即sourceTree的遴選)
1.git checkout -b'feature' 切換到新分支
2.git reflog 找到需要遴選的<commit_id1> <commit_id2>
3.git cherry-pick <commit_id1><commit_id2> 把1、2的提交合併到新分支
4.提交併推送
同樣可以用sourceTree的遴選功能實現
1.切換到需要遴選提交程式碼的分支
2.選中某些提交,右鍵選擇遴選
3.推送分支
16.git patch補丁 可以刪除某一個commit
1.git log –oneline 找到需要刪除的<commit_id>,假如倒序是第7次提交
2.git format-patch -7 生成7個patch,這些patch是按提交時間生成的
3.git reset --hard <commit_id> 回退到第8次提交的<commit_id>
4.--git push -f 強制推送到遠端
5.git am *.patch 移除0007-.patch,把其他應用提交
6.推送分支
17.git revert 回退某個commit提交
git revert <commit_id>
區別於git reset,git revert是作為一個單獨的commit提交