[心得]git使用技巧歸納
使用git管理程式碼,之前看過好多資料,不得要領。總結如下:
git reset、git checkout
這兩個命令不僅可以作用於提交,還可以作用於特定檔案
Git倉庫有三個主要組成——工作目錄,快取區和提交歷史。
你傳給git reset和git checkout的引數決定了它們的作用域。如果你沒有包含檔案路徑,這些操作對所有提交生效。
git checkout hotfix
git reset HEAD~2
如果你的更改還沒有共享給別人,git reset是撤銷這些更改的簡單方法。reset就像是go-to命令一樣。
–soft – 快取區和工作目錄都不會被改變
–mixed – 預設選項。快取區和你指定的提交同步,但工作目錄不受影響
–hard – 快取區和工作目錄都同步到你指定的提交
reset操作會重寫當前分支的歷史。正如Rebase黃金法則所說的,在公共分支上這樣做可能會引起嚴重的後果。
The golden rule is to never use it on public branches.
rebase 的原則,就是隻改變本地repo的commit,一旦本地commit push到了遠端,就不能再次rebase了。這樣就不會有那些“混亂的歷史”了
git checkout hotfix
上面這個命令做的不過是將HEAD移到一個新的分支,然後更新工作目錄。因為這可能會覆蓋本地的修改,Git強制你提交或者快取工作目錄中的所有更改,不然在checkout的時候這些更改都會丟失。和git reset不一樣的是,git checkout沒有移動這些分支。
Revert撤銷一個提交的同時會建立一個新的提交。這是一個安全的方法,因為它不會重寫提交歷史。比如,下面的命令會找出倒數第二個提交,然後建立一個新的提交來撤銷這些更改,然後把這個提交加入專案中。
git checkout hotfix
git revert HEAD~2
命令 作用域 常用情景
git reset 提交層面 在私有分支上舍棄一些沒有提交的更改
git reset 檔案層面 將檔案從快取區中移除
git checkout 提交層面 切換分支或檢視舊版本
git checkout 檔案層面 捨棄工作目錄中的更改
git revert 提交層面 在公共分支上回滾更改
git merge master feature_branch
現有的分支不會有任何形式的改變,因此也就避免了rebasing 一些潛在的缺陷, 當develop開的分支非常活躍時,這將導致branch1到N分支的歷史記錄初步變大,這時檢視工程歷史記錄,就會發現各種分叉,很難理解。
作為merging的替代方法,我們也可以將branch1分支rebase到develop分支
git checkout feature_branch
git rebase master
假設你將master 分支rebase 到 feature_brauch分支,結果將master上所有提交移動到feature_brauch的最前面,問題是:這次合併操作隻影響feature_brauch分支,所有其他開發這依然在original master分支上工作,由於rebasing是重寫提交歷史,git 會認為所有歷史提交已經與其他開發者提交的不同,同步這兩個分支唯一的辦法是將feature_brauch分支又merging到master分支,結果是兩次提交集合中大部分包含了相同的修改,不用說,這是一個非常混亂的局面。因此,當執行rebasing操作時,時常問下自己:是不是有其他人在關注改分支?如果是,則考慮其它方式,否則則可以安全使用rebasing。
git 預設的 git pull 命令相當於 git fetch + git merge
git log -p 檢視歷史紀錄以來哪幾行被修改
git log –oneline 檢視歷史提交日誌,單行顯示
提交歷史搜尋
git log –author=””
根據提交作者,搜尋提交歷史 pattern 可以是字串或這則表示式
git log –grep=””
git stash 開發中我們經常也會遇到,程式碼寫了一半,要切到另一個分支修復一個bug,或者需要拉取其他小夥伴的程式碼合併做測試,這時便可以使用 git stash經未完成的放在stash 棧中,相關命令有 :
stash list:列出stash 所有記錄
stash apply:將某個紀錄取出
stash clear:清空stash 棧
git cherry-pick
當多人在不同分支開發一個版本時,經常也會遇到 A分之上的小夥伴A debug需要B分之上小夥伴B的某次或多次提交, 這時 git cherry-pick朋友值得擁有
git cherry-pick
這一條我在某公司面試時遇到過坑,印象特別深刻!
相關文章
- Git 命令使用心得Git
- Git 使用技巧Git
- 工具歸納
- Git 使用經驗及心得Git
- 微軟程式歸納新技術:元程式歸納微軟
- idea使用技巧、心得1Idea
- MySQL鎖使用的基本原則歸納MySql
- [心得] Linux使用技巧珠璣Linux
- oracle段管理歸納Oracle
- html標記歸納HTML
- Java程式設計技巧:if-else優化實踐總結歸納Java程式設計優化
- 分享一些git小技巧,與個人心得體會Git
- Spring歸納小結Spring
- 常用Markdown語法歸納
- JavaScript核心概念歸納整理JavaScript
- git學習心得Git
- 關於jQuery UI 使用心得及技巧jQueryUI
- HTML5 標籤歸納HTML
- HTML標籤,簡單歸納HTML
- ROS入門教程歸納1ROS
- jQuery學習總結歸納jQuery
- Java執行緒池歸納Java執行緒
- Laravel驗證器用法歸納Laravel
- 歸納熱備份機制
- top sql 產生的歸納SQL
- 04-歸納概括題3
- 思科交換機配置命令歸納
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- 學會Git玩轉GitHub(第二篇) 入門詳解 - 精簡歸納Github
- 學會Git玩轉GitHub(第三篇) 入門詳解 - 精簡歸納Github
- git心得與總結Git
- Peer Dependency 一些使用場景的歸納總結
- 每天一個實用小技巧!歸納多個檔案、批次修改檔名
- Git使用技巧集合(不定期更新)Git
- 幾年的Git使用技巧總結Git
- Git 12 歲了,送給你 12 個 Git 使用技巧Git
- Kotlin知識歸納(十四) —— 反射Kotlin反射
- Kotlin知識歸納(七) —— 集合Kotlin