序言
? 現在git已經成為很多企業使用的合作開發用的東西,找工作的時候也經常被問在git上有沒有什么代碼什么的。說實話,git功能很強大,但是入門門檻比較高,和vim一樣,屬于一個神器的仿佛只有用代碼的人才會使用的東西,但是其可以應用再很多地方,比如合作寫書也不錯?
? 這篇文章主要介紹的為新手使用的時候可能會遇到的問題,方便大家上手,參考了其他博客的介紹[1,2,3,4],最后整體參考了清華軟件工程的視頻教程中git的介紹章節寫出的本文。
安裝
apt-get install git
安裝沒什么好說的,windows下就直接安裝就好了,linux下apt指令也就直接解決。
開始使用之前
首先跟著我仔細想想,如果你要和多個人一起做一件事情,開發同一個項目,那么你們應該怎么做。首先每一個人都有一個自己的本地的該項目的版本,然后有一臺服務器上有一個這個項目的正式版本,大家要保證版本同步。也就是說工作需要大體分為,本地同步到服務器,服務器同步到本地。由于可能在你同步到服務器之前有其他人更新了服務器的版本,所以每次同步本地到服務器的之前要先同步服務器端的版本到本地,即下文中先pull再push的重要原因。
創建庫
git init
版本庫其實是一個含有特殊數據結構的文件夾,上述指令就是把當前文件夾變成一個本地版本庫。
同步本地版本庫到遠端版本庫(服務器上)
首先我們需要讓本地版本庫知道咱們有哪些文件,哪些文件是庫中的文件,如果是的話就是已跟蹤文件。隨后將已跟蹤的文件標記為需要上傳,即commit操作,最后真正上傳,即push。
跟蹤文件
git add filename
提交文件
git commit -m "what you want to say"
上傳文件
git push
下面的指令為自動將文件先add再commit
git commit -a -m “msg” filename
如果我們想知道知道哪些文件是被跟蹤的,哪些文件是被修改過了的話,用以下指令
git status
考慮一種情況,就是我們commit以后,發現漏了文件怎么辦?很簡單,我們照常add文件,隨后使用下列指令來將后加的文件合并到上一次的commit里面。
git commit -amend
那么如果我們添加了文件,在上傳前后悔了怎么辦?有以下兩種方法解決。
1、取消文件的狀態,但是保留修改
git reset HEAD filename
2、取消文件的狀態,但是還原文件到修改前的狀態。
git checkout file
最后,也是超級重要的一種情況,如果服務器端別人更新了A文件,你也再同樣位置更新了A文件,則會產生沖突。這時候我們git會提示你哪個文件存在沖突,你需要手動進去修改以后,再重新add該文件再提交。
同步遠端版本庫到本地版本庫
從遠端同步到本地用的操作為分為以下幾種:
你還沒有這個項目,則克隆該版本庫
git clone username@domain:path
拉取遠端版本庫的變動:(注意這個操作應該再每一次push之前都要進行這個操作)
git pull
整體的使用流程
在我們使用的時候,我們肯定都不希望直接在“最終版本”,即master分支下進行直接操作,開發項目肯定都是一個一個功能或者說一個一個部分進行開發的,所以我們一般在開發的時候創建屬于自己的分支,在一定時日開發完成且測試通過后,才合并到“最終版本”中。所以這里我們引入分支的操作。
首先先介紹最重要的指令
git checkout
我們可以把它當做linux里面的cd或者mkdir的合并版。
創建分支
git checkout -b week1 #新建本地分支week1并切換切換到支線
git checkout -d week1 #刪除本地分支week1
git checkout master #切換回master分支
同遠端版本庫的互動
git push -u origin week1 #若遠端不存在該分支week1
git push origin --delete week1 #刪除遠程分支week1
合并分支:(在我們開發和測試完成后,將分支中的內容合并到最終版本[master]中)
git merge week1 #合并week1分支到master中
其他
之前都是命令行的操作,可能上手門檻略微有點高,但是入門之后會非常便捷和快速,畢竟手不離鍵盤的感覺相當爽。但是再熟悉之前可以用一些有圖形界面的軟件。如SourceTree,或者直接用github的網頁看和上傳也行。
上述指令只是git的一小部分常用指令,更多細節可以參見Gitbook[4]。
reference:
[1]http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743858312764dca7ad6d0754f76aa562e3789478044000
[2]http://www.lxweimin.com/p/df7ce9f3a5cb
[3]http://blog.csdn.net/wfdtxz/article/details/7973608
[4]https://git-scm.com/book/zh/v2
創建時間:2017.6.8