Git的純命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤銷更新,分支的創建/切換/更新/提交/合并,代碼沖突
這篇是接著上篇分布式版本庫——Windows下Git的環境部署以及在GitHub上開源自己的項目講的,上篇主要是說用GUI來圖形化界面操作,但是一般我們程序員也不會這么干,用命令又輕松又愉悅,所以,這里我就再開了一篇來專門說一下純命令是怎么去操作的,但是要注意哦,其實廖雪峰老師的網站就是非常贊的學習資源哦!
- 廖雪峰老師:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
我們還是先從安裝開始吧,我上篇Ubuntu的配置博客也說了安裝,這里我就三個平臺一起講吧!
一.Install
安裝其實都是最簡單的方法了
-
Windows
windows的安裝只要去下載一個協助工具就可以了,下載地址
- https://git-for-windows.github.io/
安裝之后,我們在桌面右鍵有一個Git Bash Here
- Ubuntu
linux的安裝就是一條命令的事情了,我的這篇博客里也有講Android源碼淺析(二)——Ubuntu Root,Git,VMware Tools,安裝輸入法,主題美化,Dock,安裝JDK和配置環境
在終端輸入
sudo apt-get install git
如果你是#的root權限的話,可以不用加sudo
-
X OS
mac的系統安裝雖說也是一條命令,但是他需要借助輔助的工具,當然,你也可以直接安裝XCode,它就集成了Git,不過需要配置一番,我們作為android開發人員,這個xcode其實看個人興趣吧,我們用另一種方式安裝
http://brew.sh/
只要下載安裝Homebrew,mac的終端就可以搜索安裝軟件了
輸入
sudo brew install git
等待安裝成功,檢查是否安裝成功的方式也很簡單,只要輸入
git version
查看他的版本就可以了
二.Clone
Clone就是從github上下載項目,我們在Github上新建一個項目,叫做GitTest吧!如果這一步不會操作的話,請移步:分布式版本庫——Windows下Git的環境部署以及在GitHub上開源自己的項目
我們把這個鏈接給記住了
https://github.com/LiuGuiLinAndroid/GitTest.git
這里,我先在D盤新建一個git的文件夾,然后進入這個目錄,直接右鍵打開Git Bash,然后輸入
git clone https://github.com/LiuGuiLinAndroid/GitTest.git
就可以下載下來代碼了
我們進入這個文件夾里面可以看到他只有一個文件README.md,我們輸入
vim README.md
去訪問他
這里vim是一個編輯的命令,我們推出這個vim環境只要輸入
q!
就可以了
三.Commit
提交代碼,我們先介紹一下Git的工作模式,其實吧,Git這么出名也是跟他的模式有關,而我們的章節,也是跟著他的模式走的
// add->commit->push
先是add,也就是把你要提交的代碼先提交到緩存區,然后commit提交到本地的倉庫,最后再push推送到遠程倉庫,也就是github上,這里,我們先對剛才那個README.md文件進行修改吧,我們編輯一下,加上一點文字
我們保存之后,剛才的綠色文件就變成了感嘆號,說明已經有修改了,這點和SVN一樣,我們回到命令行,這里,我們有一個很方便的命令
git status
來查看當前的狀態
這里就提示你這個文件已經是紅色的,改動了,需要提交嗎?
所以,我們就輸入
git add README.md
也就是添加到緩存區
他什么都沒提示說明add成功了,這個時候我們再次查看一下狀態,你就會發現
狀態是綠色的了,Ok,這個時候我們就需要commit了,輸入
git commit README.md
然后他會顯示這樣一個信息,這里是要你寫一些說明,我就寫了first commit
這里輸入
x
保存退出
然后我們再次查看一下狀態
果不其然,這里顯示你有一個commit,需要push,也就是推送
四.Push
既然他友好的提示我們可以push,那我們就直接推送吧,只要輸入
git push
即可,然后他會提示你輸入賬號和密碼
我們輸完之后,稍微等待一會兒,他們也自然會done的
到這里,我們的git的push就OK了,我們去github上看一下就明白了
五.Pull
這個就很好理解了,開原作者對自己的項目進行了一次修改,有新的東西了,我們就去更新一下, 也就去把代碼拉下來,這樣,我們在github上修改一下
現在的樣子就是這樣的了
這個很明顯和我本地的不一樣,所以我們就需要去pusll,輸入
git pull
好的,下拉成功
我們可以用vim命令去查看一下
可以看到,代碼也是拉了下來
六.版本回退
寫代碼寫著寫著發現自己入坑了,怎么辦,而且代碼還提交了,在隊友還沒有pull之前,趕緊版本回退,那該怎么做呢?我們可以這樣,首先,我們輸入
git log
來查看我們提交代碼的記錄
這里我們可以看到,我們第一次是系統初始化的,第二次也就是我們認為的提交,第三次,也就是我們pull的時候在github上提交的,我現在演示一下怎么退回到first commit
但是我們要注意,上圖中,log日志黃色的一長串ID,這就是我們要注意的東西,我們只有通過這個ID才能版本回退,所以,這里我先拷貝一下first commit的ID:
a0c401fcda58304938767820f35d6b4bcaad28db
好的,我們開始了,版本回退的命令是
git reset --hard a0c401fcda58304938767820f35d6b4bcaad28db
好的
他提示已經回退到first commit了,我們驗證一下,只要看一下README.md里面的信息就可以,我們用vim命令去看
這里果不其然是顯示第一次提交,說明我們已經成功的版本回退了,版本回退有風險,操作需謹慎哈!
如果你說要再回到原來的狀態,也是可以的,按照上面的方法再走一遍流程即可,不過要注意的是,這次想要獲取到的ID就不是輸入git log了,這里又出來一個新的命令了
git reflog
記錄的是所有的log,接下來,你就知道怎么去操作了
不過,這里也牽引出我們的撤銷操作出出來了
七.撤銷更新
前面已經說了這么多,這部分其實就是寫命令,所有就不實際演示了
//如果你寫代碼寫錯了之后想撤銷的話,也就是還原文件初始狀態
、git checkout --文件名
//如果你已經add了代碼到緩存區
git reset HEAD 文件名
//但是如果你已經commit了,就需要版本回退了
git reset --hard 版本號
//要是你推送到了遠程倉庫,比如github
.....你就很痛苦了
八.分支的創建和切換
我們都知道,默認是有一個主分支master分支,但是我們有時候如果需要測試某些功能或者怎么樣的時候,需要創建一個分支,當覺得分支的代碼可以了就合并到主分支,這樣的好處也是保證主分支的一個干凈性和安全性,好的,我們具體來看一下怎么操作的:
- 查看分支
git branch
- 創建分支
git branch [分支名]
- 切換分支
git checkout [分支名]
這樣就可以了,還有另一種比較方便的方法就是
- 創建并且切換分支
git checkout -b [分支名]
這張圖,我們可以看到,我們先是查看了自己所在的分支,位于主分支,然后我創建了一個分支叫hello,接著我切換到hello這個分支,再次查看自己所在的分支,就是hello了,然后再切換回主分支,再用創建并切換的命令創建了android這個分支,然后查看分支,我們就位于android這個分支了
九.分支的更新和提交
分支的push和pull,其實和主分支的操作還是有些許區別的,就是命令
- 分支push
git push origin 分支名
看,他可以提交,顯示要我們賬號密碼
這里,我們已經把android這個分支推送上去了,而hello這個分支沒有,所以我們輸入
git brnch -a
查看所以的分支
這里,白色的是本地分支,綠色的,是你所在的分支,紅色的,是遠程的分支
- 分支pull
既然push要做處理,那pull肯定要咯,和push一樣
git pull origin 分支名
OK,這個是可以的
十.分支合并
這里,我們可以看到,我們所在的分支是android
我們對README.md進行修改
然后add commit
現在我們android分支已經修改了,但是主master分支病沒有,我們覺得android分支這段代碼可以用了,需要合并到主分支,那我們該怎么做呢?
我們這里可以看到,我們先是切換到了主分支,然后輸入
git merge 分支名
去合并代碼,現在,我們查看一下
好的,這樣,代碼就合并成功了
十一.代碼沖突
這個代碼沖突,在SVN中也是精彩會碰到,還是自己對版本控制這一塊的不熟練,一般出現沖突Git的話是兩種情況
- 在你push推代碼的時候發生代碼沖突
- 合并分支的時候發生代碼沖突
比如你在分支中寫的代碼,主分支也有類似的,就極有可能發生沖突,我們來測試一下,我們不演示了,我講個大概的思路,當出現沖突的時候,命令行會告訴我們哪個文件合并出錯,找到這個文件的時候
vim 文件名
你可以看到有個特殊的箭頭包裹著一段代碼,那就是兩個代碼塊不一樣的地方,你需要自己手動修復
然后,需要重新提交,但是再commit的時候
git commit -i -m '更新說明' 文件名
這樣提交后就可以直接push了