git簡單使用入門總結
之前老早就聽說過git,但是一直就沒怎么去了解,之前在公司里頭都是用的svn版本控制工具,然后上個月換到了新公司之后,團隊里使用的是git工具,然后就專門花了點時間去了解了一番,當然期間也確實碰到了不少問題,從入職到到今天應該有快一個半月了,然后下面就是我將這一個半月以來針對git的理解使用后整理出來的一個簡單入門總結。
一、安裝git
我的電腦是win7系統,然后從git官網下載msysgit安裝包(http://msysgit.github.io/),安裝流程和一般的windows軟件的安裝流程差不多,沒什么區別。至于linux的還沒研究過,安裝成功后,在桌面或者文件夾的任何空白位置鼠標右擊,如果出現下面的菜單,則表示安裝成功。。。
二、配置git提交的用戶名和郵件
這樣做的目的是為了在git的log日志里面可以清楚的區分出每次的提交人是誰,以防日后出了問題能夠立馬清晰準確的定位出是哪個屌絲挖的坑,操作步驟,隨便在哪個空白位置右鍵,然后——》git bash,調出git的命令控制臺,輸入以下命令:
$ git config --global user.name "Your Name(用戶名)" $ git config --global user.email "email@example.com(郵箱)"
注意:git config命令的–global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。
三、生成 SSHKey
git推薦使用SSH協議傳輸文件(代碼),當然使用https協議也是可以的,步驟:任意空白處右鍵調出git Bash命令控制臺,輸入以下命令:
$ ssh-keygen -t rsa -C "youremail@example.com"
然后一路回車,使用默認值即可,應該是需要3個回車的,設置密碼為空(注意按3個回車的時候別輸入其他的,不然設置的密碼不為空,你就等著每次提交輸入密碼吧),如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。一般這個id_rsa.pub里面的內容是要配到git服務器上面的(由統一的人去管理),然后我們就可以從服務器上面拿代碼和提交代碼了。
======================================================================================
四、git多人協作流程(這里我們這里使用的是gerrit代碼審查系統)
注:這里說明一下,我自己目前是這樣操作的。然后下面的第三步和第四步其實可以合并成一步操作,使用git pull origin <branch_name>,pull命令和fetch命令的區別主要在于pull是將遠程服務器上的代碼拿到本地后,然后會自動進行合并,而fetch命令則是只會拉取遠程服務器上的代碼,而不會主動去執行合并操作,需要我們手動再執行rebase或者merge命令進行合并,(當然這里是首次從服務器上拉取代碼,本地沒有做任何修改,所以基本沒有任何沖突,直接使用pull即可)
我個人喜歡分開操作,這樣分開操作之后,先fetch抓取最新提交的代碼,然后再執行合并,此時若出現沖突,就解決沖突,沖突解決完之后再執行合并操作,其實也一樣,看個人喜好。。
1、從遠程服務器獲取版本代碼
1)、登錄到gerrit服務器的web頁面上,找到需要clone的版本URL地址(因為我們用到了gerrit工具,所以一般都是到gerrit上面進行管理的,當然也可以使用其他的工具,例如,gitHub,找到需要clone的url鏈接,我這里clone的是master主干分支,公司的項目,這里不便公開)
git clone ssh://xxx@www.dreamtech.com:12256/xxx
2)、創建新的本地分支并且切換到該新分支
git checkout -b saas origin/saas 3)、從遠程獲取最新提交的代碼
git fetch origin saas或者 git fetch</pre>
git fetch是簡寫(git 會自動搜索和當前分支名相同的遠程分支名)
4)、將本地修改與遠程進行合并此時,若遇到沖突,需要先手動解決沖突(例如在eclipse中先解決沖突,再執行合并)
git rebase origin/saas也可以 git merge origin/saas</span></pre>
注:rebase和merge命令都可以執行合并命令,但是也有些區別,查了下資料,網上說到rebase命令會更干凈些,然后提交歷史線呈線性展示,至于其他的區別目前還不清楚,想要了解的話可自行度娘。。。
======================================================================================
2、生成changID (非必須)
注意:前面已經提過了,因為我這里使用了gerrit代碼審查工具,所以每個人提交的時候就必須要先生成這個changID值,如果沒有這個changID,則不能到gerrit代碼審核工具中進行代碼審核操作了。。而gerrit代碼審查工具的存在就沒有意義了。
操作步驟:進入到工作空間(workspace)中的倉庫目錄(比如說mlds),然后調出git bash控制臺,輸入如下命令:
![]()
http://scp -p -P 29418 username@xxxxxxxxxxxxx:hooks/commit-msg .git/hooks/
注意:關于這個東西應該不是統一的,我這里只是提下這么一個東西,流程一般是這樣的,,就是說你這邊修改了代碼,想要push到遠程服務器,一般的操作是先push到gerrit服務器中,然后在gerrit代碼審核工具里面進行代碼審核,評分,最后再將審核通過后的代碼合并到遠程服務器的分支中。。完畢
3、本地做過修改之后,再提交到遠程服務器
1)、查看本地有哪些文件做了修改
git status2)、將本地的修改先添加到暫存區
git add -A (這個是將所有的本地修改添加到暫存區)或者git add file (這個是單個的文件的添加操作)</pre>
3)、將暫存區中的內容提交到本地倉庫
git commit -m "注釋"4)、獲取遠程倉庫中的最新提交,以防發生沖突
git fetch origin saas或者簡寫 git fetch</pre>
5)、將本地修改的代碼與遠程倉庫中的代碼進行合并,此時,若遇到沖突,需要先手動解決沖突(例如在eclipse中先解決沖突,再執行合并)
git rebase origin/saas6)、將本地倉庫中的代碼push推送到遠程倉庫中
這里需要注意:
我們也可以直接用命令git push origin saas將代碼直接push到遠程代碼倉庫,但是由于現在我們這邊是使用了gerrit代碼審查工具,所有不能直接這樣推送,必須使用git push origin head:refs/for/saas這個命令將代碼推送到gerrit服務器上,然后我們再登錄到gerrit中(會有一個web頁面供我們操作)進行審核之后,執行最后合并,此時如果報錯的話 有可能是因為你的changID 沒有生成,使用這個命令生成changID,再次強調,這個不是統一的。。
http://scp -p -P 29418 username@xxxxxxxxxxxxx:hooks/commit-msg .git/hooks/
其中的username改成自己的,然后執行
git push origin head:refs/for/saas7)、登錄到gerrit服務器中,進行代碼審核,然后執行合并(這一步先不管,專人統一審核,合并提交代碼到遠程中央倉庫)
五,撤銷修改
1、場景一:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,使用
git checkout -- filename2、場景二:當你不但改亂了工作區的某個文件的內容,而且還提交到了暫存區(在本地執行了commit提交,但是
還沒有commit提交到遠程服務器)時,想丟棄修改,分兩步:第一步使用命令git reset HEAD filename,就回到了場景一
第二步再按照場景一的步驟操作
3、場景三:已經提交了和不合適的修改帶版本庫時,想要撤銷本次修改,則可以使用版本回退,但是前提是還沒有推送push到遠程庫
六、版本回退
HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令
git reset --hard commit_id穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
七、git stash 用法
關于Git Stash的詳細解釋,適用場合,這里做一個說明:
當前工作區內容已被修改,但是并未完成。這時Boss來了,說前面的分支上面有一個Bug,需要立即修復。可是我又不想提交目前的修改,因為修改沒有完成。但是,不提交的話,又沒有辦法checkout到另外的分支。此時用Git Stash就相當于備份當前工作區了。然后在Checkout過去修改,就能夠達到保存當前工作區,并及時恢復的作用。
之后,另一個版本的bug修復完畢之后,再使用checkout切換回之前的分支,然后再使用git stash pop命令或者git stash apply命令就又可以恢復回來了,此時才真心感覺到了git的強大之處,有木有一種很牛逼的感覺,哈哈。。。。。。。。。。。
git stash備份當前的工作區的內容,從最近的一次提交中讀取相關內容,讓工作區保證和上次提交的內容一致。同時,將當前的工作區內容保存到Git棧中。
git stash pop從Git棧中讀取最近一次保存的內容,恢復工作區的相關內容。由于可能存在多個Stash的內容,所以用棧來管理,pop會從最近的一個stash中讀取內容并恢復。
git stash list顯示Git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。
git stash clear清空Git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。
八、git如何放棄所有本地修改
git checkout . #本地所有修改的。沒有的提交的,都返回到原來的狀態 git stash #把所有沒有提交的修改暫存到stash里面。可用git stash pop回復。 git reset --hard HASH #返回到某個節點,不保留修改。 git reset --soft HASH #返回到某個節點。保留修改
至此,完畢,以上的內容就是我這一個半月以來使用git工具和對git的理解使用整理出來的所有的總結,雖然很簡單,內容也不多,但是我相信對入門還是有些幫助的,希望能夠幫到某些人,畢竟我用的時間不長,理解的也不是很深入,這些內容也都只是根據自己的一個理解和使用,然后加上百度了一些資料所總結出的東西。倘若我的這篇博客有幸被大神們看到,對于我而言也是榮幸之至,可能文中的某些地方與大神們的理解還是有些出入,也有可能某些內容不是很準確,或者有可能還是錯的等等等等,然后還煩請大神們能夠指出,以免我誤人子弟,不勝感激!!!
后續:
上面的內容只是一個簡單的入門教程,旨在讓大家以最簡單的方式開始接觸和使用git,若有想進一步了解git的同學,可以參考下面給出的鏈接:
1.Git 簡單使用教程(廖雪峰的文章,非常喜歡,就是看他的文章入門的,比我這個要詳細的多,比較系統的使用教程,建議看下)
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
2.Git官方手冊(git官方打造,想要全面了解和使用git的同學必看,中文版的哦)
3.Git 工作流程(其實git官方手冊上面,這網頁就單獨拿出來分析和講解,建議看下)
http://kb.cnblogs.com/page/152176/
4、Git 版本控制流程圖(git版本控制的流程圖,建議了解下)
http://www.juvenxu.com/category/scm/
</div> 來自:http://blog.csdn.net/hu1991die/article/details/45787755