1. 程式人生 > >適合初次使用git的詳細教程和idea的結合使用

適合初次使用git的詳細教程和idea的結合使用

溫馨提醒:本教程巨長,最好跟著做,單看不跟著練習操作容易睡著(新手來說)

一:上傳專案到github

首先是git軟體的安裝,git 官網下載連結 ,然後是安裝,全部下一步下一步就好了。這裡就不贅述了

在idea上面配置好你的git,files->settings->Version Control->Git->Path to Git executable: 設定為安裝git中所安裝的git.exe

碼接下來為github設定賬號密碼:files->settings->Version Control->GitHub->Create API Token



設定好了之後,IDEA的git準備工作就做好了。

然後在github上面新建一個倉庫

建立完成後如下

接下來我們用idea建立一個hellogit的Java project,如果不會,那麼請自行百度用idea建立一個簡單的Java Project

建立完成後,點選VCS--import into Verdion Control--Create Git Repository。

選擇你的專案hellogit

填入 你的github剛剛建立的地址

就是這個

然後右擊你的專案,找到git然後點選 +add 然後你會發現你的檔案變綠色了,接下來就點選Commit Diretory

接下來就去github上面看看你的專案是不是已經上傳了

二:接下來我們不依賴idea的git工具,我們用git命令的方式。

git安裝好了之後,在c盤或者其他碟符建立一個資料夾,比如git

然後在git資料夾裡面右擊滑鼠git bash here

好了接下來就是重點了。

三:初級應用

【1】下載專案

你的專案github上的下載地址圖示

 

git clone https://github.com/JohnBarrowman65/hellogit.git(你的githubi專案https下載連結)

然後git 目錄下就能看到你在github上的專案已經被下載下來了。

定位到hellogit資料夾右擊git bash here

【2】檢視日誌

git log

檢視到我們在上傳專案的時候的提交日誌,記住git log 後的第一行提示資訊,有一個commit 後面一串字串(SHA-1 校驗和) 後面跟著括號,括號裡面的HEAD ->master這些資訊。。後面有講到這些都是什麼東西。

【3】在src目錄下隨便新建一個檔案,比如新建一個gitcommit.java檔案,然後查詢

git status

status是用來查詢當前工作目錄的狀態的,如圖

“皇家“資訊翻譯:

(1)On branch master --說明你是在一個叫master  的branch(分支)上。我們新建專案的時候,預設都是有一條主線master(也叫主分支)的。

(2)Untracked files --未追蹤的檔案gitcommit.java,git還給你一個溫馨提示git add <file>可以把檔案加入到暫緩區

【4】新增入staging area 區

git add .
#如果是你刪除了一個檔案,用這個
git rm .

看清楚了後面有個點,enter後再git status看下,發現new file:xxx.java了,說明檔案已經被記錄進了 staging area(暫存區)

【5】提交

git commit -m ‘備註資訊’

然後再git log一下,可以看到我們剛剛commit的記錄資訊

這個時候commit只是commit到我們本地的倉庫,遠端倉庫你去看還是沒有提交的。

這裡涉及到git這個分散式中央倉庫的理論基礎知識,也是跟svn這些單中央倉庫一個很大的不同的地方。git你clone專案的時候不僅是下載下遠端倉庫的東西,還會在你自己電腦本地建立一個本地倉庫,你無需聯網就可以自己寫自己的東西,由於可以提交到本地,所以你可以分步提交程式碼,把程式碼提交做得更細,而不是一個提交包含很多程式碼,難以 review 也難以回溯。

【6】push到中央倉庫

git push 

這個時候github上就能看到我們的提交的東西了

【7】上面的情況是單單一個人的,然後一個專案往往都是好幾個人一同操作的,所以我們本地模擬下你的同事

切換回git主目錄再clone下一個專案並另起一個名字區別假裝是你的同事。注意 不用怕衝突,因為git是以檔案為區分管理的

git clone https://github.com/JohnBarrowman65/hellogit.git anotherhellogit(同事的檔名)

切換進入anotherhellogit資料夾,開啟git bash here,接下來還是一頓簡單的操作新增檔案然後提交最後push

同時github上面能看到剛剛同事上傳的檔案了

接下來就是你要下載下同事的檔案下來了,切換回你的目錄

 git pull

然後你可以看到你的資料夾裡面也已經有同事提交的東西了。

【8】push衝突了

(1)寫完所有的commit後,不用考慮中央倉庫是否有新的提交,直接push

(2)如果 push 失敗,就用 pull 把本地倉庫的提交和中央倉庫的提交進行合併,然後再 push 一次

到此為止,這個工作模型已經是一個最簡單的可用的工作模型了。這個工作模型已經可以讓團隊用來合作開發了。

------------------------------------------------------------分割線--------------------------------------------------------------------------

三:接下來探討下我們前面留下的坑,HEAD->master,commit,等具體的實際意思

【9】HEAD當前commit的引用,你的一次更新改動commit到倉庫後就算一次commit,每當有新的commit後,HEAD自動與其對應,commit本身有後面一串很長的SHA-1來標識。總之,當前commit在哪裡,HEAD 就在哪裡,這是一個永遠自動指向當前commit的引用,所以你永遠可以用HEAD來操作當前commit。

【10】branch分支,mseter也是一個分支,不過是指主分支,git上預設分支就是master

新建分支叫做branch1並切換到branch1的分支

git checkout -b branch1

注意master和branch1是平等的

刪除分支,刪除遠端倉庫分支

#刪除分支
git branch -d branch1
#刪除遠端倉庫分支
git origin -d branch1

【11】merge合併分支到主線上。

上面我們剛剛建立了一個branch1的分支,假如我們在這個分支裡面新增了檔案,還是一頓操作

然後再上傳分支到git遠端倉庫上面

git push origin branch1

接下來注意先切換回master主線,這個時候最好git pull一下(這其實是pull操作的一種經典情形:本地的master沒有新提交,而遠端倉庫中有同事提交了新內容到master),然後再合併分支branch1

git checkout master #切換到master主線
git pull #更新下
git merge branch1 #合併分支

最後就是git push上去就可以了,這個時候我們就可以在github上面看到我們剛剛新增的branch1分支中新增的東西了

【12】merge衝突

當你在合併分支的時候有可能回出現衝突,比如你在這個分支中修改了a,另一個分支中修改了b,那麼合併後就是既改 A 也改 B,這個動作會自動完成;如果兩個分支都改了同一個檔案,但一個改的是第 1 行,另一個改的是第 2 行,那麼合併後就是第 1 行和第 2 行都改,也是自動完成。但是你的兩個分支改了相同的內容,Git 不知道應該以哪個為準,如果在merge的時候發生了這種情況,Git 就會把問題交給你來決定。那麼你現在需要做兩件事:解決掉衝突然後手動commit一下放棄解決衝突。

取消merge用的命令是git merge -abort

-------------------------------------------------------分割線--------------------------------------------------------------------------

接下來說下最常用的工作流模型,也是很多公司用的(聽說)

這種工作流的核心內容可以總結為兩點:

任何新的功能(feature)或 bug 修復全都新建一個 分支來寫;分支寫完後,合併到主線,然後刪掉這個分支。

打個比方,對於hellogit這個專案,你需要完成裡面的論壇功能,那麼你就自己新建一個bbs的branch,寫好後提交到中央倉庫,給經理或者其他同事看下確認沒問題了,你再最後確認合併到主線上。

【13】Feature Branching工作流

#建立分支     
git checkout -b xxx
#提交東西     
git add .   
git commit -m xxx(提交備註說明)
#上傳分支     
git push origin xxx
#切換分支     
git checkout master
#更新本地倉庫跟中央倉庫的master一致     
git pull
#合併分支     
git merge xxx 
#提交到中央倉庫      
git push
#刪除本地分支          
git branch -d xxx
#刪除遠端倉庫分支   
git push origin -d xxx

這個時候可以通知你的同事或者上級查收下你的程式碼,我們切換到一開始建立的你的”同事“

git pull
git chekcout bbs

如圖就是我上傳的bbs功能,你同事那裡也能看到了,確認沒問題後,你就再合併分支然後上傳到中央倉庫

git merge bbs
git push
git branch -d bbs
git push origin -d bbs

這個時候可以上去看看github上面是不是已經存在bbs的功能程式碼了

同時為了不必要留下很多分支,建議你同時刪除本地和中央倉庫的bbs分支

用這種方案去工作還有個好處就是多工的支援,很多時候你的任務時一起來的,你就可以同時建立多個分支,這個做完可以切換到另一個繼續做。

-------------------------------------------------分割線-------------------------------------------------------------------------------

四:高階應用

【14】merge換成rebase的操作

#新建並切換到新增的分支        
git checkout -b rebasebranch

#這裡就寫你的功能啦.......

#變基(衍合)
git rebase master

#在rebase之後,切回master再merge一下,把master移到最新的commit

#切換分支       
git checkout master

#合併分支       
git merge rebasebranch

如圖:先新增了分支,然後提交到了中央倉庫

然後使用rebase合併分支,最後push上到專案中。這樣也能實現分支的合併

注意:一般不要從master向其他branch執行rebase操作

五:高階應用修改commit
先在本地對需要修改的檔案進行修改

--git add xxx(修改了的檔名)

--git commit -amend

commit-amend是用在修改當前commit的,那要是發生在前一個commit呢?用rebase

首先先定位到你需要修改的commit前,用

git log

如上圖,我想修改的提交備註為”修改gitcommit檔案“那一行的commit

那麼我可以這樣

git rebase -i HEAD^^

在彈出的編譯頁面選擇你需要修改的commit,把最前面的pick改為edit退出後就停留在你需要修改的commit了

這個時候就能繼續你的修改東西的操作了

git add xxx(修改了的檔名)

git commit -amend

在修復完成之後,就可以用git rebase --continue來繼續rebase過程,把後面的commit直接重新連線起來並應用上去。

最後寫好了也可以push上去到中央倉庫。

六:高階應用撤銷commit

git reset --hard HEAD^

前面的操作也是用於撤銷最新的commit的,但是如果是前面幾個,那麼reset--hard就用不了,這個時候用互動式rebase撤銷commit

git rebase -i HEAD^^

這個時候又彈出一個編輯框了,你只需要刪除你想要撤銷的commit上的那一行就可以了。

當然是發生在前面所有的前提都是在內容未push前的。如果是push後的,並且是在你自己未合併到master主線上的分支,那麼你也可以更改然後強制push上去

git push origin branch1 -f。

記住假如你的分支已經合併到master那麼千萬彆強制push了,不然覆蓋掉之前人家提交的,你會被打的。這個時候你就要用revert了。它的用法很簡單,你希望撤銷哪個commit,就把它填在後面:

git revert HEAD^

本地做完提交後再push就可以了

七:高階應用stash

臨時存放工作目錄的改動,當你某個功能還沒寫好沒commit的時候,你不必急急忙忙commit上去,再去切換分支做別的緊急的事情,可以直接

git stash -u

做完緊急的事情後你再返回來做你的功能

git stash pop

這樣你之前儲存的東西又都回來了!

八:高階應用reflog

找回誤刪除的分支

git reflog

 這個命令可以找到HEAD的移動記錄,找到你想要找回的分支當時commit,切換到它,比如說branch1我要找回它

那麼我就切換到它

git checkout branch1
git checkou  -b branch1

這樣你剛刪除的分支branch1就找回來了。

九:高階應用排除不想被管理的檔案和目錄

.gitignore檔案

建立倉庫的時候github上面有模板讓你選擇,自動生成相應的.gitignore檔案

寫這個教程花了我整整一天的時候,各位看官如果覺得有幫助請點個贊謝謝,文中如果有出錯的地方,歡迎有老司機指正