【步兵 工具篇】一文教你玩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~
之前
真愛無價,歡迎打賞~