學習Git的總結與體會

學習Git的總結

bloggit


第一次學習Git是徹底按照廖雪峯老師的教程學習的,學的過程當中基本上沒有遇到什麼問題,可是本身實際操做就問題不斷了.github

首先,仍是按照慣例,來膜拜一下廖雪峯老師精簡的教程知識吧,中間穿插一些本身的感悟.服務器

安裝
git:msysgit是Windows版的Git,從http://msysgit.github.io/下載,而後按默認選項安裝便可。app

安裝完成後,在開始菜單裏找到「Git」->「Git Bash」,蹦出一個相似命令行窗口的東西,就說明Git安裝成功!ssh

安裝完成後,還須要最後一步設置,在命令行輸入ide

  
  
  
  
  
$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"

建立repository學習

  
  
  
  
  
$ mkdir learngit$ cd learngit$ pwd

初始化項目$ git initfetch

添加文件(此處可將整個文件添加 使用git add filename 後面也能夠空格以後再加其餘的文件...網站

  
  
  
  
  
$ git add readme.txt$ git commit -m "wrote a readme file"

add全部文件$ git add .url

add並rm全部$ git add -A

提交modify和rm(新加的文件不會自動提交)$ git commit -a

注意:此處的git commit -m "xxx" 裏的"xxx" 最好寫上,屬於給你提交的文件一個tag,利人利己,何樂不爲呢.

初始化一個Git倉庫,使用git init命令。

添加文件到Git倉庫,分兩步:

第一步,使用命令git add ,注意,可反覆屢次使用,添加多個文件;

第二步,使用命令git commit,完成。

查看狀態與版本倒退

查看你剛纔操做的狀態$ git status

查看修改內容$ git diff readme.txt

查看log,後面參數可選(數字)$ git log (--prety=oneline)

回退上個版本(HEAD指向master的指針,^個數表示上幾個版本)$ git reset --hard HEAD^

回退n個版本$ git reset --hard HEAD~100

回退到commit爲3628164版本
$ git reset --hard 3628164`

查看每一次命令$ git reflog 

把readme.txt文件在工做區的修改所有撤銷$ git checkout --readme.txt
        

這裏有兩種狀況:
一種是readme.txt自修改後尚未被放到暫存區,如今,撤銷修改就回到和版本庫如出一轍的狀態;
一種是readme.txt已經添加到暫存區後,又做了修改,如今,撤銷修改就回到添加到暫存區後的狀態。

命令中的「--」很重要,沒有「--」,就變成了「建立一個新分支」的命令$ git checkout -- file

能夠把暫存區的修改撤銷掉(unstage),從新放回工做區$ git reset HEAD readme.txt

從版本庫中刪除文件$ git rm readme.txt

若是在文件管理器中誤刪了文件,由於版本庫裏還有呢,能夠用這句恢復$ git checkout -- readme.txt

遠程庫

關聯一個遠程庫,使用命令

  
  
  
  
  
$ git remote add origin https://github.com/yourgithubname/gitdemo.git

也能夠是這種(前提在ssh創建以後,帳戶密碼填寫以後)

  
  
  
  
  
$ git remote add origin git@github.com:yourgithubname/gitdemo.git

關聯後,使用命令,第一次推送master分支的全部內容

  
  
  
  
  
$ git push -u origin master

每次本地提交後,只要有必要,就可使用命令推送最新修改

  
  
  
  
  
$ git push origin master

克隆repository。建立一個空的repository,而後用命令

  
  
  
  
  
$ git clone https://github.com/cloneurl/clonetest

分支與衝突

查看分支:$ git branch

建立分支:$ git branch name

切換分支:$ git checkout name

建立+切換分支:$ git checkout -b name

合併某分支到當前分支:$ git merge name

-no-ff參數,表示禁用「Fast forward」 會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。

  
  
  
  
  
$ git merge --no-ff -m "merge with no-ff" dev

刪除分支:$ git branch -d name
強行刪除分支(當在分支上修改後,不想併入其餘分支,想刪掉,就要強行刪除)

  
  
  
  
  
$ git branch -D branch-name

解決分支合併產生的衝突:

手動修改衝突後提交就行

命令能夠看到分支合併圖$ git log --graph

當你接到一個修復一個代號101的bug的任務時,很天然地,你想建立一個分支issue -101來修復它,可是,等等,當前正在dev上進行的工做尚未提交

stash功能,能夠把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做:git stash(有修改還沒add並commit的時候調用後,現場保留,分支清空)

命令查看工做現場$ git stash list

恢復有兩個辦法:

一是用$ git stash apply恢復,可是恢復後,stash內容並不刪除,你須要用$ git stash drop來刪除;

另外一種方式是用$ git stash pop,恢復的同時把stash內容也刪了

查看遠程庫的信息$ git remote

顯示更詳細的信息$ git remote -v

抓取與推送

  
  
  
  
  
$ git remote -vorigin https://github.com/githubname/gitdemo.git (fetch)  origin https://github.com/githubname/gitdemo.git (push)  

顯示了能夠抓取和推送的origin的地址。若是沒有推送權限,就看不到push的地址

推送分支

推送分支,就是把該分支上的全部本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上

  
  
  
  
  
$ git push origin master

若是要推送其餘分支,好比dev,就改爲

  
  
  
  
  
$ git push orgin dev

抓取分支

小夥伴要在dev分支上開發,就必須建立遠程origin的dev分支到本地,因而他用這個命令建立本地dev分支

  
  
  
  
  
$ git checkout -b dev origin/dev

如今,就能夠在dev上繼續修改,而後,時不時地把dev分支push到遠程

  
  
  
  
  
$ git push origin dev

碰巧你也對一樣的文件做了修改,並試圖推送:推送失敗,由於你的小夥伴的最新提交和你試圖推送的提交有衝突

先用git pull把最新的提交從origin/dev抓下來,而後,在本地合併,解決衝突,再推送

  
  
  
  
  
$ git pull

失敗了,緣由是沒有指定本地dev分支與遠程origin/dev分支的連接,根據提示,設置dev和origin/dev的連接

  
  
  
  
  
$ git branch --set-upstream dev origin/dev

再pull就好了,但合併會有衝突。須要手動解決

標籤管理

發佈一個版本時,咱們一般先在版本庫中打一個標籤,這樣,就惟一肯定了打標籤時刻的版本。未來不管何時,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。因此,標籤也是版本庫的一個快照。

Git的標籤雖然是版本庫的快照,但其實它就是指向某個commit的指針(跟分支很像對不對?可是分支能夠移動,標籤不能移動),因此,建立和刪除標籤都是瞬間完成的。

建立標籤

切換到須要打標籤的分支上$ git checkout dev

一、敲命令$ git tag name就能夠打一個新標籤$ git tag v1.0

二、查看全部標籤$ git tag

默認標籤是打在最新提交的commit上的。有時候,若是忘了打標籤,好比,如今已是週五了,但應該在週一打的標籤沒有打,怎麼辦?

方法是找到歷史提交的commit id,而後打上就能夠了

  
  
  
  
  
$ git log --pretty=oneline --abbrev-commit

對應的commit id是「ef51d63」,敲入命令$ git tag v0.9 ef51d63

三、能夠用$ git show tagname查看標籤信息$ git show v0.9

四、能夠建立帶有說明的標籤,用-a指定標籤名,-m指定說明文字:

  
  
  
  
  
$ git tag -a v0.1 -m "version 0.1 released" 02172e4

五、能夠經過-s用私鑰簽名一個標籤

  
  
  
  
  
$ git tag -s v0.2 -m "signed version 0.2 released" a8093be

簽名採用PGP簽名,所以,必須首先安裝gpg(GnuPG),若是沒有找到gpg,或者沒有gpg密鑰對,就會報錯

用命令$ git show tagname能夠看到PGP簽名信息

用PGP簽名的標籤是不可僞造的,由於能夠驗證PGP簽名。驗證簽名的方法比較複雜

操做標籤

標籤打錯了,也能夠刪除$ git tag -d v1.0

推送某個標籤到遠程,使用命令$ git push origin tagname:

一次性推送所有還沒有推送到遠程的本地標籤$ git push origin --tags

從遠程刪除。刪除命令也是$ git push origin :refs/tags/tagname

配置別名

若是敲$ git st就表示$ git status那就簡單多了

一、只須要敲一行命令,告訴Git,之後st就表示status$ git config --global alias.st status

-二、-global參數是全局參數,也就是這些命令在這臺電腦的全部Git倉庫下都有用。

三、命令$ git reset HEAD file能夠把暫存區的修改撤銷掉(unstage),從新放回工做區。既然是一個unstage操做,就能夠配置一個unstage別名

  
  
  
  
  
$ git config --global alias.unstage 'reset HEAD'

敲入命令$ git unstage test.py

實際上Git執行的是$ git reset HEAD test.py

四、配置一個$ git last,讓其顯示最後一次提交信息$ git config --global alias.last 'log -l'

$ git last就能顯示最近一次的提交

報錯:

若是輸入$ git push origin master
提示出錯信息:error:failed to push som refs to .......
解決辦法以下:
一、先輸入$ git pull origin master //先把遠程服務器github上面的文件拉下來
二、再輸入$ git push origin master
三、若是出現報錯 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal: Could not read from remote repository.
四、則須要從新輸入$ git remote add origin git@github.com:yourgithubname/gitdemo.git

若是輸入$ git remote add origin git@github.com:yourgithubname/gitdemo.git
提示出錯信息:fatal: remote origin already exists.
解決辦法以下:
一、先輸入$ git remote rm origin
二、再輸入$ git remote add origin git@github.com:yourgithubname/gitdemo.git
三、再輸入-f爲強制推送$ git push -f origin master

使用git在本地建立一個項目的過程
$ makdir ~/hello-world //建立一個項目hello-world
$ cd ~/hello-world //打開這個項目
$ git init //初始化
$ git add README //更新README文件
$ git commit -m 'first commit' //提交更新,並註釋信息「first commit」
$ git remote add origin git@github.com:yourgithubname/gitdemo.git //鏈接遠程github項目
$ git push -u origin master //將本地項目更新到github項目上去

國外網友製做的Git Cheat Sheet,建議打印出來備用:

Git Cheat Sheet

Git的官方網站:http://git-scm.com,英文自我感受不錯的童鞋,能夠常常去官網看看.

報錯部分歡迎更新提醒.

相關文章
相關標籤/搜索