Git--团队开发必备神器
花了兩天時間專門搞了一下git。整理一下分享給大家。以下我們開始。。
。
- 轉載請注明出處:
- http://blog.csdn.net/Hello_Chillax/article/details/47405887
- 很多其它精彩請訪問:http://blog.csdn.net/hello_chillax,謝謝
一.學習使用git之前的準備(Windows環境下)。
在本地裝一個git,并裝上GitBash。(不會?會裝QQ就會裝git。。
)
去GitHub官網上注冊一個賬號。
給個傳送門GitHub官網
二.做好準備之后,咱們先來掃一下盲。講講概念。
- git和GitHub有什么差別?(已淚奔。。。
)
答:git是本地代碼版本號管理工具,我們寫項目時,難免會要進行代碼管理吧。比方我們每天寫完代碼之后,總要把它備份一份吧,原因非常easy。萬一你的工作空間(workspace)所在的硬盤突然掛了呢,不要說幾率非常小。可是,萬一發生呢。。
我們總能感覺到git和GitHub之間好像是有什么關系。上面我們提到,git是本地代碼管理工具。為了防止我們的工作空間(workspace)所在的硬盤突然掛掉。可是,你就不操心整塊硬盤都掛了嗎。。當然,這僅僅是個小概率事件。更重要的是:我們在團隊開發時,須要多人合作開發同一個軟件,不可能我寫了代碼拷給你,你寫了代碼拷給我吧。我們須要一個統一的遠程版本號控制倉庫:GitHub
三.我們開始GitHub之旅。
1.首先解釋幾個單詞的意思(⊙o⊙)…
后面會用到的。并且非常重要的:
- pull:拉
- push:推
- repository:倉庫
- branch:分支
- status:狀態
- commit:提交
- config:配置
- global:全局的(屬性,變量等)
2.畫一張圖來解釋git本地操作,以及遠程操作的邏輯流程
從上圖中能夠看出。我們日常編碼時。首先是把工作空間里的更改的代碼通過操作①來推送到暫存區(index。stage),然后假設我們確認這些代碼正確。無須改動。那么就能夠把它通過②推送給本地master分支。這里我們能夠把master分支理解成本地的暫時倉庫,我們能夠從這里恢復代碼,也能夠通過這個分支進行提交到遠程GitHub上的master分支,把你的代碼提供給別人。
上圖我們僅僅是描寫敘述了由本地逐步推向遠程的過程。我們先將這個高明確,后面我會反過來再操作一遍。
3.我們先實現步驟①
1.假設我們對代碼進行了更改。這里我們以一個文件readme.txt為例。來解說。
(也就是說我們如今工作區間假設是E://firstrep。里面有一個文件readme.txt)
2.首先我們打開D://firstrep。在該文件夾下在空白處點擊右鍵打開給Git Bash.exe,初始化一個本地倉庫。
Administrator@HJQ1EBGYSWRMA1K /e/firstrep
$ git init
Initialized empty Git repository in E:/firstrep/.git/(master)
注意:僅僅有以“$”開頭的才是我們寫的命令。其它的都是系統自己主動生成的提示信息,當中運行初始化命令之后我們能夠看到路徑名后面多了一個“master“,這說明我們初始化成功。
3.我們如今來找一下工作區間,版本號庫,暫存區,以及本地master分支
工作空間:E:/firstrep
版本號庫:E:/firstrep/.git/(master)注意,這里.git文件夾是隱藏的,不可見,能夠更改文件夾屬性使其顯現出來。
暫存區和master分支:這兩個東西都存在版本號庫文件夾下
4.我們先對該文件進行更改:
git is very easy.
然后。我們把它提交到版本號庫的暫存區里(index,stage),運行例如以下代碼,查看git狀態
$ git status
On branch master
Initial commit
Untracked files:
(use “git add …” to include in what will be committed)
nothing added to commit but untracked files present (use “git >add” to track)
這里會提示我們說:在工作空間多了一個文件。我們還沒有加入到版本號庫
5.以下我們把它加到版本號庫里的暫存區。
git add –all
這樣,我們第①個環節已經運行結束。
4.以下我們來運行步驟②
1.我們剛剛把更改的readme.txt.加入到暫存區(index。stage),如今我們把再把它加到本地master分支。
$ git commit -m “測試
[master (root-commit) 74c27df] 測試
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
我們如今通過上面一行命令。講readme.txt提交到本地master分支(事實上這么說不是非常準確,事實上提交的是改動。而不是全部內容。這里我們能夠先這么簡單地理解)。以下我們來查看一下git的狀態
$ git status
On branch master
nothing to commit, working directory clean
OK。至此,我們已經成功完畢了本地代碼的提交。
即①②兩步。
以下我們進行第三部。
5.運行步驟③
如今應該是遠程有一個分支,本地有一個分支,我們在GitHub創建一個倉庫(repository)。假設倉庫地址為:https://github.com/hellochillax/Yard.git
以下我們進行推送:
1.加入遠程倉庫的地址:
$ git remote add origin https://github.com/hellochillax/Yard.git
這里就產生了一個相應關系:origin–>https://github.com/hellochillax/Yard.git
2.進行推送操作:
$git push origin master
然后系統會提示你輸入GitHub的賬號password,輸入正確的賬號password后。點擊回車,系統就會進行提交工作。并且會顯示運行進度。當然,我這里就不演示了,以防把我原來的項目覆蓋掉了。(上面的GitHub地址是我在GitHub上的一個項目,不可隨便推。。。當然你看到這里也別想著去搞破壞,由于你不知道我的GitHub的賬號password。
。。)
我們上面全部的內容攻克了本地推送到GitHub。以下我們發過來解說從GitHub上拉取被人寫的內容到本地倉庫。
6.我們還是先搞一張圖,有句話說的好。沒圖你說個。**
以下。我們還是分三步來講:
7.運行步驟①
有了上面的經驗,我們就能夠快一點了~
上命令:
$ git pull origin master
上面的命令是,從遠程拉取文件到本地。(相同的。我就不點回車給大家演示了
8.運行步驟②③
在運行之前。我們先查看一下git的狀態:
$ git status
On branch master
nothing to commit, working directory clean
呦呦呦,什么情況,怎么是“nothing to commit”呢。怎么回事,不應該是再從版本號庫中復制內容到工作空間嗎,怎么能是不須要提交呢。
別急。你打開工作文件夾,發現。工作文件夾里已經存在了GitHub上的全部文件。
也就是說,步驟①,事實上已經幫我們搞定了①②③要做的事。所以,②③步驟事實上不要我們做不論什么事情。。
四.git的使用之細節補充
五.最后貼一下我平時總結的git經常使用操作
git init 初始化一個本地倉庫
git add –all 加入全部文件到暫存區(stage,index)
git commit -m “描寫敘述信息” 提交更改到本地master分支
git status 查看git當前狀態
git diff 查看改動后和改動前的不同之處
git log 獲得文件更改的歷史記錄
git reset –hard HEAD^ 回退本地分支到上一個版本號
git reset –hard HEAD~n 回退本地分支到上n個版本號
git checkout – readme.txt:把readme.txt文件在工作區的改動全部撤銷
git remote :獲得遠程庫列表
- git remote -v :獲得遠程倉庫的具體信息
- git remote rm [name] :刪除相應的遠程庫
- git remote add origin git@github.com/hellochillax/SoftWareYard.git 關聯一個遠程庫
- git push -u origin master 第一次推送master分支的全部內容
- git push origin master 推送最新改動
git branch -u origin/master master 本地跟蹤遠程
Git鼓舞大量使用分支:
查看分支:git branch
創建分支:git branch
切換分支:git checkout
創建+切換分支:git checkout -b
合并某分支到當前分支:git merge
刪除分支:git branch -dssh-keygen -t rsa -C “hello@example.com” 創建SSH Key
- git config –global user.name “Your Name” 設置username
- git config –global user.email “email@example.com” 設置password
命令行通用操作:
pwd:顯示當前路徑
ls -ah:顯示文件列表(包含隱藏文件)
cat readme.txt:顯示文件內容
rm readme.txt: 刪除文件
==========================我是華麗的分隔符==========================================
時間過得真快,轉眼半年多過去了。實驗室里的人都在忙著各種內推面試。
我也不例外。總體復習啊。這樣的酸爽。
本來能夠不用考慮git的。可是內推時手殘在簡歷的個人技能部分寫了一句“熟悉git、svn等版本號管理工具。
”所以還是再來復習一下git,并且再補充一點半年前沒有提到的知識點。
也算為了面試官問到時能不掉鏈子了。
git的基本知識和經常使用命令,上次都寫得幾乎相同了。
這次講講git分支的合并。
一. fetch和pull的差別。
這兩個命令的功能都是從遠程的分支獲取最新的版本號到本地。可是有一定的差別。
- 1.git fetch:相當于是從遠程獲取最新版本號到本地。不會自己主動merge
- 2.git pull:相當于是從遠程獲取最新版本號并merge到本地
我們能夠用以下的三個命令來體會二者的差別:
git fetch origin master:tmp
git diff tmp
git merge tmp
在實際使用中,git fetch更安全一些
由于在merge前,我們能夠查看更新情況,然后再決定是否合并.
二. merge和rebase的差別。
關于這個問題,在stackoverflow上有個非常清晰明了的解釋,感興趣的能夠看一下:http://stackoverflow.com/questions/16666089/whats-the-difference-between-git-merge-and-git-rebase
貌似須要梯子才干看。
沒梯子也沒關系,我把內容翻譯一遍。
首先,假設我們的版本號庫眼下有三個提交。A,B,C,如圖:
然后,此時有兩個開發人員同一時候開發,當中小王開發了D,小李開發了E,如圖:
非常顯然,眼下已經發生了沖突(合并時出現故障),我們解決這個沖突,有兩種方法:merge和rebase。
假設採用merge:
假設採用rebase:
可是。有個小問題:採用rebase時。可能會使虛線部分的提交丟失。所以有一定風險性,建議新手都用merge。
轉載于:https://www.cnblogs.com/llguanli/p/8916819.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Git--团队开发必备神器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CF385C Bear and Prim
- 下一篇: *Codeforces587E. Duf