git 基础教程总结
Git是目前世界上最先進的分布式版本控制系統。
基礎
一、安裝
1、安裝
2、配置
$ git config –global user.name “Your Name”
$ git config –global user.email “email@example.com”
二、創建版本庫
1、創建文件夾
2、初始化文件夾
$ git init
3、把文件添加到版本庫
編寫文件readme.txt
$ git add readme.txt
$ git commit -m “wrote a readme file”
三、時光穿梭機
1、查看當前狀態
$ git status
查看修改狀態
查看工作區和版本庫里面最新版本的區別
$ git diff HEAD – readme.txt
2、提交修改
$ git add readme.txt
$ git commit -m “add distributed”
四、版本回退
1、重新修改再提交
$ git add readme.txt
$ git commit -m “append GPL”
2、查看修改記錄
$ git log
$ git log –pretty=oneline
3、回退到某一版本
$ git reset –hard HEAD
在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^。當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
4、重新回到當前版本
$ git reset –hard < commit id>
查看< commit id>
$ git reflog
$ git log –pretty=oneline –abbrev-commit
5、工作區和暫存區
工作區:就是你在電腦里能看到的目錄
版本庫:工作區有一個隱藏目錄.git
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
五、撤銷修改
1、丟棄工作區的修改
$ git checkout -- readme.txt命令git checkout – readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
2、用命令git reset HEAD file可以把暫存區的修改撤銷掉(unstage),重新放回工作區
六、刪除文件
$ git add test.txt $ git commit -m "add test.txt"2、刪除
在文件管理器中把沒用的文件刪了
$ rm test.txt工作區和版本庫就不一致了,git status命令會立刻告訴你哪些文件被刪除了:
$ git status從版本庫中刪除該文件,那就用命令git rm刪掉,并且git commit:
$ git rm test.txt $ git commit -m "remove test.txt"3、刪除后恢復
刪錯了,因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復到最新版本:
$ git checkout -- test.txtgit checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。
只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容
遠程倉庫
第1步:創建SSH Key。
在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_ rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。
$ ssh-keygen -t rsa -C "youremail@example.com"第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面:
然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容
一、添加遠程庫
1、首先,登陸GitHub,然后,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫:
在Repository name填入learngit,其他保持默認設置,點擊“Create repository”按鈕,就成功地創建了一個新的Git倉庫:
2、現在,我們根據GitHub的提示,在本地的learngit倉庫下運行命令:
$ git remote add origin git@github.com:michaelliao/learngit.git添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。
3、下一步,就可以把本地庫的所有內容推送到遠程庫上:
$ git push -u origin master把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。
由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。
4、從現在起,只要本地作了提交,就可以通過命令:
$ git push origin master5、要關聯一個遠程庫,使用命令:
git remote add origin git@server-name:path/repo-name.git;關聯后,使用命令git push -u origin master第一次推送master分支的所有內容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
二、從遠程庫克隆
$ git clone git@github.com:michaelliao/gitskills.git $Git clone https://github.com/jenkinsci/gerrit-trigger-plugin.git分支管理
一、創建與合并分支
1、首先,我們創建dev分支,然后切換到dev分支:
$ git checkout -b dev或者
$ git branch dev $ git checkout dev查看當前分支
$ git branch在dev分支上正常提交
$ git add readme.txt $ git commit -m "branch test"切換到master
$ git checkout master2、我們把dev分支的工作成果合并到master分支上:
git merge命令用于合并指定分支到當前分支
$ git merge dev3、刪除dev分支
$ git branch -d dev4、當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。
用git log --graph命令可以看到分支合并圖。
二、分支管理策略
1、普通模式合并
準備合并dev分支,請注意–no-ff參數,表示禁用Fast forward:
$ git merge --no-ff -m "merge with no-ff" dev因為本次合并要創建一個新的commit,所以加上-m參數,把commit描述寫進去。
2、分支策略
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;
干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;
你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
三、Bug分支
1、保存現場
Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作:
$ git stash2、首先確定要在哪個分支上修復bug,假定需要在master分支上修復,就從master創建臨時分支:
$ git checkout master $ git checkout -b issue-101修改后提交
$ git add readme.txt $ git commit -m "fix bug 101"3、修復完成后,切換到master分支,并完成合并,最后刪除issue-101分支:
$ git checkout master $ git merge --no-ff -m "merged bug fix 101" issue-101 $ git branch -d issue-1014、恢復原來工作現場
$ git checkout devGit把stash內容存在某個地方了,但是需要恢復一下,有兩個辦法:
一是用git stash apply恢復,但是恢復后,stash內容并不刪除,你需要用git stash drop來刪除;
另一種方式是用git stash pop,恢復的同時把stash內容也刪了:
$ git stash pop四、Feature分支
每添加一個新功能,最好新建一個feature分支,在上面開發,完成后,合并,最后,刪除該feature分支。
1、添加分支
$ git checkout -b feature-vulcan2、提交
$ git add vulcan.py $ git status $ git commit -m "add feature vulcan"返回dev分支,準備合并
$ git checkout dev3、合并前刪除
$ git branch -d feature-vulcan強制刪除
$ git branch -D feature-vulcan五、多人協作
當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,并且,遠程倉庫的默認名稱是origin。
1、查看遠程庫
$ git remote詳細信息
$ git remote -v2、推送分支
$ git push origin master推送到dev分支
$ git push origin dev如果推送失敗,先用git pull抓取遠程的新提交
3、抓取分支dev
創建本地dev分支:
$ git checkout -b dev origin/dev設置dev和origin/dev的鏈接:
$ git branch --set-upstream dev origin/dev先用git pull把最新的提交從origin/dev抓下來,然后,在本地合并,解決沖突,再推送:
$ git pull合并有沖突,需要手動解決,解決后,提交,再push:
$ git commit -m "merge & fix hello.py" $ git push origin dev4、多人協作
首先,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;
如果合并有沖突,則解決沖突,并在本地提交;
沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
5、總結
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;
在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;
從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。
標簽管理
一、創建標簽
1、切換分支
首先,切換到需要打標簽的分支上
$ git branch $ git checkout master2、打標簽:git tag < name>
$ git tag v1.03、查看所有標簽
$ git tag4、找到歷史提交的commit id,然后打上
$ git log --pretty=oneline --abbrev-commit $ git tag v0.9 < commit id>5、查看標簽信息:git show < tagname>
$ git show v0.96、還可以創建帶有說明的標簽,用-a指定標簽名,-m指定說明文字:git tag -a <tagname> -m "blablabla..."
$ git tag -a v0.1 -m "version 0.1 released" 36281647、通過-s用私鑰簽名一個標簽:git tag -s <tagname> -m "blablabla..."
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a簽名采用PGP簽名,因此,必須首先安裝gpg(GnuPG)
二、操作標簽
1、刪除
$ git tag -d v0.12、推送標簽到遠程:git push origin < tagname>
$ git push origin v1.03、推送全部本地標簽
$ git push origin --tags4、推送后刪除
先從本地刪除:git tag -d < tagname>
$ git tag -d v0.9從遠程刪除:git push origin :refs/tags/< tagname>
$ git push origin :refs/tags/v0.9參考
整理自:http://www.liaoxuefeng.com/
總結
以上是生活随笔為你收集整理的git 基础教程总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS学习(十四):ROS Spinni
- 下一篇: 单位四元数(unit quaternio