【步兵 工具篇】一文教你玩git

【步兵 工具篇】一文教你玩git by EOS.

最近開始使用git,之前一直用svn包括我自己的代碼管理也是svn。
因爲svn夠用,而且界面操作簡單明確,把sever放到到網盤、或移動硬盤也很方便。
(ps:當然還有一個隱含原因,當菜單變成英文的時,他就會讓我頭暈這裏寫圖片描述)
不過由於工作原因,開始使用git,發現並沒有那麼難。
下面我來一文教會你,玩溜git的基本操作。


git的優點

1、版本庫本地化,支持離線提交,相對獨立不影響協同開發。每人都擁有自己的版本控制庫,在自己的版本庫上可以任意的執行提交代碼、創建分支等行爲。比如:多次分部提交,任意回滾或合併爲一條幹淨的commit再推送到服務器。
2、很強大的版本控制。每次提交都會有對應的操作標識,你可以回退到任意一個過渡版本。
3、獨立的分支結構。可以讓你多條進度共同推進,而不產生相互影響。
以上都不是重點,重點是github是全球最大的同性交友….呸,開源項目資源倉庫。
好比讓你坐在一家豪華餐廳,菜單上的菜免費點~(ps:但是!菜太多反而不知道吃什麼…)


基本操作

創建用戶名和email

git config --global user.name eos.
git config --global user.email 44**21@qq.com

(密鑰及其權限部分過濾掉,有很多完整教程可以參考)

創建一個倉庫

git init   

這樣會在當前目錄生成一個.git的文件夾,可使用dir /a /b 或 ls 查看

拷貝倉庫到本地

git clone url(或者本地路徑)

這樣會在當前目錄生成本地的倉庫,可進行各種離線操作。

常看倉庫當前狀態和記錄

git status
git log --oneline -10

會顯示出 可提交部分和可添加部分,以及相應的表示new、delete、modify等。

添加/撤銷添加

git add src/ui*     //添加到緩存區
git reset fileName  //==還原並保存修改

將文件變爲可提交狀態

拉取最新代碼

git pull origin master

提交前一定要先拉取併合並最新代碼,不然到最後衝突會越來越多。
git pull做的是git fetch+git merge的操作。

代碼提交

git commit      //查看提交明細,做檢查用
git commit -m "logInfo:fix bug#10086"       //正式提交

代碼推送

git push origin master  //推送到主分支

將本地的操作記錄和文件推送到遠程服務器

=====以上就完成了最簡單的git提交流程======


進階操作

衝突解決

git stash       //把本地修改隱藏起來
git status      //看一下環境已經是一個乾淨的了
git pull        //拉取最新代碼
git stash pop   //還原本地修改
git status      //查看衝突文件both:.*,修改後再提交
git status | grep "both"        //或者配合管道

放棄修改/覆蓋

git checkout -- src* 

還原到緩存區的內容,如果沒有add就是上次更新(上個commit)的內容,
如果add了,就會還原到add時候的內容,可以放棄add先reset一下,再 checkout – ,回覆到上次更新內容。
內容較重要時可結合 stash+stash apply來備份。

版本回溯

git log -10 --oneline       //查看最近十次提交記錄
git reset --soft hashcode   //回溯到某個版本並保留修改
git reset --hard hashcode   //回溯到某個版本放棄所有修改

git reflog                  //產看所有head變化操作

git reset –soft可以做到將多次提交合並,做一個功能,中間又做了幾次修改,
回溯一下,把中間過程忽略掉,提交一個乾淨的更新。
git reset –hard是一個相當危險的操作,它會讓你本地所有修改全部丟失,想想都可怕。
好在有reflog,在執行 reset –hard 操作之前,進行一次備份性質的commit,
commit操作會引發head變化,會被記錄到reflog中,所以可以再次還原回來,做到有備無患。

忽略文件

//同步忽略(作用於 unstage,也就是未添加過的)
vim .gitignore 
git add .gitignore
git commit . -m "add ignore"

//忽略本地文件(作用於 unstage,也就是未添加過的)
git config --global core.excludesfile ~/Desktop/git_skip.txt

//忽略本地文件修改(作用 track,也就是已經添加過,但爲提交的)
git update-index --assume-unchanged config.plist
git update-index --no-assume-unchanged config.plist     //取消忽略

//利用管道查看已經忽略修改的文件
git ls-files -v | grep "^h"     //已經添加
git status --ignored            //未添加過

忽略文件很常用,比如一些本地化的配置文件,肯定是不可以提交的。
那麼把這些忽略掉,確保每次commit之後,git status都是一個乾淨的環境,能保證漏提或者提錯。

暫存操作

git stash           //暫存當前工作區
git stash save "modify battle"  //暫存當前工作區
git stash list      //查看暫存區列表
git stash pop       //還原最後一次暫存的工作區,並從中刪除
git stash apply stash@{0}   //還原stash@{0},但不刪除
git stash drop stash@{0}    //從直接從暫存區刪除 
git stash clear //清空暫存區 

需要提醒的一點是,暫存區總歸是暫存,說實話就像回收站,會不小心 順手就給清空了。
所以重要的東西還是commit比較好,能回溯比較安心。stash沒了就真的沒了
分支操作

git branch              //列出本地分支,當前分支前會有個*
git branch -r           //列出遠程分支,所屬分支git status會顯示
git branch es           //創建一個分支
git checkout es         //切換到指定分支
git branch -m es eos    //修改分支名字
git branch -d eos       //刪除指定分支
git merge es            //把指定分支合併到當前分支下,一般先checkout再merge
git push origin es      //把分支推送到服務器
git push origin --delete es     //把分支從服務器刪除,重命名=先刪再推

關於各個狀態,形象點可以比作 槍,梭子,口袋=、=
add 就相當於把梭子握在手裏,commit 就相當於梭子裝在槍上,push就相當於開搶。
checkout分支就相當於換槍但梭子還在手裏,stash就相當於把梭子放回口袋,pop則是拿出來。
reset 就相當於卸梭子。就是這麼簡單!

附贈一篇不錯的具體的分支使用策略:Git分支管理策略

=====再有了這些,日常使用應該沒有問題了======


個性化

別名

git config --global alias.ignore "update-index --assume-unchanged"
git config --global alias.unignore "update-index --no-assume-unchanged"
git config --global alias.elog "log --pretty=\"%Cgreen %an %Creset %ai %Cred %s\""

別硬是爲了方便使用,相當於二次封裝,可以有效減少自己的操作量。
一次少打5個字符,一天下來也省不少力氣~比如 st = status, sh = stash,br = branch之類。

“git config –global”相關配置在~/.gitconfig文件中,也可以打開文件手動編輯。

另外git log也很有講究,網上有很多個性化log配置講解,比如:打log還能這麼隨心所欲!,可以研究研究~


總結

因爲我也剛剛使用git沒幾天,很多高級用法待發覺,git管理也沒什麼實際經驗。
等以後覺得自己夠水平了,再來新開一篇補上,不過本篇旨在基礎操作,這麼多應該夠用。
保證新手開車也能穩,累屎了,就寫這麼多!

See Again~
之前
真愛無價,歡迎打賞~
讚賞碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章