從開始實習到如今大概有一個月了,這個月時間接觸了不少新東西,其中就包括了git版本控制、分支管理等等。我在這段時間裏,深深地感覺到了git對公司項目代碼管理和控制、團隊合做帶來的益處和其重要性。其實在實習開始前就明白git對於一個合格的程序員來講,是不可不掌握的,但因爲以前學校團隊人數較少,對於代碼的管理沒有作嚴格要求等等緣由,因而就沒有好好學習git,到了公司實戰真是後悔不已!(在學校的時候用qq發送代碼文件這樣的傻事情沒有少作)前端
這幾天認真看了廖雪峯老師的git教程,對之前一些模糊的概念有了更清晰的瞭解,以及對整個團隊利用git進行項目開發、版本控制、分支管理等等都有了進一步的認知。這裏要特別感謝大哥孜孜不倦的教誨我哈哈哈!git
在讀書分享交流會中我瞭解到黃淇前輩的「恍然大悟合集」,那麼但願本身也能夠以這樣的方式去學習和整理總結在前端路上的一些「恍然大悟」知識點。因而,此次的技術感想便有了本身如下的「恍然大悟」。程序員
1.Git是分佈式的版本控制系統,區別於SVN的集中式版本控制系統。二者各有各的好處和弊端,但git是相對更加快速、簡單的,現在也更加流行。web
2.git中的工做區和暫存區的兩個概念很是重要。工做區相對於版本庫,經過 git add把工做區的存儲到版本庫中的stage中,而暫存區stage經過git commit把修改提交到版本庫的分支上。Stage暫存區和分支都存在於版本庫中。具體如圖。app
3.git會爲咱們自動建立一個master分支,以及指向master的一個指針HEAD,指向當前分支。當你使用git branch切換分支後,HEAD指針會指向該分支。經過git reset 能夠回退版本,HEAD表示當前版本,HEAD~表示上一版本,上上版本就是HEAD~~,上一百個是HEAD~。webstorm
4.當你想回退到某個具體的版本時,或者回退以後又想回到以前的版本,能夠經過git log指令或者git reflog查看提交的commit id 而後經過id回到那個版本分佈式
5.git diff 可讓你看到版本提交之間有哪些修改了的地方。在webstorm的可視化界面中這個修改就能很好的查看(webstorm牛逼!)學習
6. git checkout 不只能夠切換分支,還能夠撤銷修改。加入你的代碼沒有add,那麼git checkout --filename就是把你的修改撤銷到版本庫中同樣的代碼,假如你的代碼add或者commit了,那這個指令就是撤銷修改回到添加暫存區後的狀態。總之就是讓你的代碼回到最近的git add和git commit的狀態版本控制
7.由於git checkout有多種功能容易混淆,因此git也推薦使用git switch來切換分支指針
8.git merge 默認使用fast-forward模式,這樣合併後加入刪除了分支不會保留分支信息,使用—no-ff模式能夠保留信息
8.在分支策略中,master應該是很是穩定的,應該是僅用來發布新版本,能夠新建一條dev分支專門用於開發,團隊在dev中新建分支來分工合做。
9.當你在一條分支上工做卻要臨時去另外一條分支修復bug時,能夠git stash保留工做現場,當bug修復好了能夠用git stash apply來回到現場。另外爲了不在一條分支上的改動重複工做到其餘分支,可使用git cherry-pick <commit> 命令來「複製」修改
10.用git rebase結合vi操做來合併commit提交,將本地未push的分叉提交歷史整理成直線。
11.git分支管理是重中之重,也是git的精髓,要好好學習!
以上就是我目前對git的一些感悟。另外經過反思我以爲以前的「技術感想」不太像是「感想」,側重點更接近於「整理」,之後但願本身更加以「感想」的方式去記錄本身的學習成長曆程。
共勉,加油!