git 做爲一個當下最流行的版本控制工具,不會git都很差意思(吹)聊(牛)天,可是做爲一個剛接觸不久的小編,在使用過程當中,仍是遇到一些頭疼的地方,因此開個帖,記錄下在學習和使用git的過程當中的筆記和一些小技巧。(大佬勿噴~)git
咱們平常使用最多的命令應該就是這些了,也基本上知足大部分工做流瀏覽器
git init
建立版本庫,會在當前根目錄生成 .git
文件夾,當前項目的git相關配置都在這個文件夾下git clone
你是我?對,你就是我git add [<options>]
將有變動的文件添加到暫存區,能夠指定文件或者所有添加 git add .
git status
顧名思義啦,查看當前項目狀態,是否是有修改,暫存區是否是有待提交文件等git commit -m "message"
將暫存區的文件提交到當前分支中,message
不能夠爲空,一個好的message但是很是重要的,畢竟哪一個開發狗手裏沒個板磚git remote add <name> <url>
當咱們本地的代碼須要上傳到服務器時,就須要新增個遠端服務的地址,name
指定一個名稱,該名稱在後續的操做很是有用的,url 遠程倉庫的地址git push <remote-name> <branch>
這個命令能夠理解爲,將本地的修改推送到遠端倉庫裏,remote-name
就是咱們在 git remote add
設定的名字,branch
指定推送上去的分支git pull <remote-name> <branch>
功能與上一個相反,將遠端的代碼更新到本地,<remote-name> <branch>
就很少解釋了哈git checkout -b <branch> [<remote-name>/<branch>]
建立分支,有兩種情景,一 在當前分支的基礎上建立的新分支,那麼使用這個 git checkout -b <branch>
或者 git branch <branch>
,在hot fix 的時候就很是適用;二 想從遠端拉取個新的功能分支,那麼來發這個 git checkout -b <branch> <remote-name>/<branch>
指定遠端和具體分支,適合多分支同時開發的場景git checkout <branch>
切換分支git branch [--list]
查看分支列表git branch -d <branch>
刪除分支,say goodbyegit fetch <remote-name>
將本地庫所關聯的遠程庫的commit id更新至最新,若是你們使用 git pull 來更新代碼,那基本上不會使用該命令,不過在當咱們不想更新遠程倉庫,卻又想查看遠程倉庫的最新提交歷史的時候,這就派上用場啦一般有兩種方式服務器
git pull <remote-name> <branch>
從遠程獲取最新版本並merge到本地,至關因而 git fetch
和 git merge
一併執行了git fetch <remote-name>
更新狀態;git rebase <remote-name>/<branch>
或者 git merge <remote-name>/<branch>
更新代碼,我的推薦 rebase
對小白來講,最可怕的莫過於,代碼擼完了,一提交,臥槽!有衝突!
好吧,衝突其實並(非)不(常)可怕。
衝突建議在本地進行解決,不建議在網頁上操做,由於會默認雙向合併,親自測出來的app
git pull
方式更新的代碼,那麼分別將衝突的文件逐一修改,完成後,git add <conflict file>
git commit -m "merge conflict"
這種方式會產生一次額外的 commitfetch
後 rebase
的方式更新代碼,根據提示,解決後,git add <conflict file>
,注意此時不須要 git commit
! 只須要 git rebase --continue
便可,這中方式不會生成新的 commit記錄,使得咱們的提交記錄乾淨一些,且合併到一半,心情很差,咱們還能夠 git rebase --abort
取消本次合併,下(吃)班(飯)再說誰沒寫過bug的時候,但被眼光犀利的咱們發現了,咱們用以下操做將其roll-back。有如下三種場景工具
尚未執行 git add
學習
git checkout -- <file>
該文件的修改,將被啪嘰打回最初狀態,不過如果某一處地方須要還原,這個操做就不適合了,手動修改便可fetch
已經git add
, 但未 git commit
提交url
git reset HEAD <file>...
將文件從暫存區撤銷掉版本控制
頭腦混亂的小編,已經把bug commit 上去了(寫bug咱們歷來不含糊),若是是這個bug涉及的代碼量很是多,須要徹底從新寫過那種,那能夠經過回滾的方式git reset --hard HEAD~
回退到上一個版本 ,或者回滾到指定的版本號code
某個已經提交的文件,想要修改文件名稱的大小寫,啪嘰,改完,發現git沒檢查出有變動,心理mmp,莫慌,git 默認對於文件名大小寫是不敏感的,因此git認爲當前代碼無任何改動,那麼如何才能讓 git 識別文件名大小寫變化呢
有兩種方式
git config core.ignorecase false
設置爲大小寫敏感,但聽說設置後會有奇奇怪怪的小問題,我還沒試過,你們能夠嘗試看看哈~git mv <old-file> <new-file>
取巧的方式,但肥腸好用顧名思義,指定文件或目錄,git將其視爲空氣。
有個情景,若某個已經版本管理中的文件,想不要歸入版本管理中,可以下操做
.gitignore
中添加規則git rm [-f] <filename>
將文件從版本控制中刪除,同時本地文件也會被物理刪除git rm --cached <filename>
僅從版本庫中刪除,本地文件仍然保留
git commit -m "remove file from git"
git會無視咱們的空文件夾,但當咱們又不得不提交的時候,咱們能夠建立個對項目無影響的文件,如 .gitkeep
名字你們隨意便可
若是你使用的是可視化工具,那當我沒說~
早上 git xxx,下午git xxx ,時間久了,大夥必定發現,經常使用的那些命令天天都要敲個幾百遍,肌肉都有記憶了,敲快一點,還不當心敲錯了。放心,咱們能夠設置別名,讓你們少敲幾個單詞啦
git config --global alias.<alias-name> <name>
告訴git,之後 alias-name
就是 name
了
如下是我設置的別名列表
git config --global alias.co checkout git config --global alias.cm commit git config --global alias.br branch git config --global alias.fu 'fetch upstream' git config --global alias.po 'push origin' git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
你們根據本身的習慣折騰就好啦,--global
指的是全局設置,若想查看配置信息, cd ~ ; cat .gitconfig
便可查看
這方面的工具,市面上一大把了,好比
[Git GUI] gitk
便可打開,一個很是淳樸的GUI
小編用過sourcetree,感受還不錯,很是直觀,我的不推薦小白入門使用圖形化工具,萬一不當心點錯了,真不知道該如何處理~ (來自一個制賬加手殘的小編的舒適提醒)
-----------------------我是分割線--------------------------
git <command> <-help | -h >
能夠查看命令的參數和簡要介紹git <command> --help
經過瀏覽器打開該命令的詳細介紹