引言
有幸選到孟寧老師的《高級軟件工程》這門課,孟老師上課告訴我們,工欲善其事必先利其器,作為軟件工程的學生,Git不會用,那是不行的!因此,需要動手操作來學習如何使用Git,一款神奇的魔術軟件!
准備工作
首先,我們需要用於VSCode這款編程神奇,然后在github上申請一個屬於自己的賬號,最后下載Git軟件。
我們先在VSCode中創建一個文件夾,然后按住Ctrl+Shift+G,如圖所示,
會發現,現在還沒有一個本地的存儲庫,所以需要初始化一個存儲庫
//這一步也可以通過git init 實現,在VSCode中打開終端,然后輸入
git init
初始化后,我們打開這個文件夾,然后查看,你會發現多了一個.git的隱藏文件,而這就是我們的存儲庫了!
這樣我們的魔術工作就准備好了!
魔術場景一:Git本地版本庫
我們在homework1的文件夾下創建一個homework1.txt,然后輸入點內容,就可以將其上傳到我們的github上了!
至於怎么在VSCode連上github,可以參照這樣一篇博客https://blog.csdn.net/qq_42852004/article/details/90057151
//在終端中輸入,git status可以查看當前工作區的狀態
git status
然后我們再創建一個homework2.txt,輸入一些內容,然后使用git add功能
//git add [FILES] # 把文件添加到暫存區,可以添加多個文件(這里只添加了一個文件)
git add
仔細查看,其實,這里有一個問題,第一次為什么沒有把文件加入暫存區呢?
原因是,我們是在homework1這個文件夾下創建的homework2.txt,因此在高軟作業這個目錄下是查詢不到的,因此也就不能將其添加到暫存區中!
//git commit -m "wrote a commit log infro” # 把暫存區里的文件提交到倉庫
git commit -m "使用git commit功能"
提交完成后,你會發現左邊工作區的暫存的更改,已經消失了!好神奇哦!然后我們也可以通過可視化操作,將這些修改推送到github上
當我們打開自己的github時候,此時已經多了一個txt文件!
//git log # 查看之前的提交記錄,便於回到過去
git log
//git reset *****的頭幾個字符 # 回退到某一個版本
git reset ......
當我們使用回退功能時,會發現產生了差異,左邊是回退后的文件,右邊是回退前的文件,在VSCode中,我們可以清楚的看到這樣的對比。
//git reflog # 可以查看當前版本之后的提交記錄,便於從過去回到未來 //git reset *****的頭幾個字符 # 回退
git reflog git reset ......
這些就是Git在本地的一些操作,是不是很簡單,但又很神器呢,那我們進入下一個魔術吧。
魔術場景二:Git遠程版本庫
我們先在這里進行一個說明,先用一張圖來理一下git fetch
和git pull
的概念:
可以簡單的概括為:
git fetch
是將遠程主機的最新內容拉到本地,用戶在檢查了以后決定是否合並到工作本機分支中。
而git pull
則是將遠程主機的最新內容拉下來后直接合並,即:git pull = git fetch + git merge
,這樣可能會產生沖突,需要手動解決。
下面我們來實踐一下!
我們現在github里對homework1.txt進行修改,修改如下
我們將使用git pull功能,從github上將修改的內容拉到本地
git pull
當我們使用了git pull功能后,我們發現,txt里的代碼修改。
我們再次對github上對homework1.txt進行修改
我們將使用git fetch功能,從github上將修改的內容拉到本地
git fetch
當我們使用了git fetch功能后,我們發現,txt里的代碼沒有修改。我們可以通過使用下面的代碼,展示出差異:
git log -p FETCH_HEAD
顯示差異后,我們可以通過git merge來將差異合並,解決沖突,從而使得,本地的代碼與github上的代碼同步。
git merge
這樣,本地代碼與github上的代碼就同步啦!
由此也可以看出:git pull = git fetch + git merge。
我們在本地進行了修改,又需要怎么把代碼上傳到github上呢?
//git push 可以將本地存儲庫的代碼上傳到github上
git push
我們再打開github上看看我們的文件,是不是已經改變了?
魔術場景三:團隊項目的分叉合
在實際的工作中,都是團隊開發,那么在一個團隊中又是怎么操作的呢?
-
團隊項目的每一個開發者都采用的工作流程如下:
- 1.克隆或同步最新的代碼到本地存儲庫中;
- 2.為自己的工作創建一個分支,該分支應該只負責單一功能模塊或代碼模塊的版本控制;
- 3.在該分支上完成單一功能模塊或代碼模塊的開發工作;
- 4.最后將該分支合並到住分支上。
下面我們就來試一試吧!
git checkout -b testbranch //創建testbranch分支
git branch //查看所有分支
然后我們在testbranch分支上進行多次操作,然后提交到暫存區。
然后我們切換回主分支(master分支)
git checkout master
VSCode會提示我們主分支需要更新
我們可以通過merge來合並差異,將testbranch的內容融入master分支中。
git merge --no-ff testbranch
然后提交到github上,可以啦!
魔術場景四:Git Rebase
那主分支,也就是master分支要修改其他分支怎么辦呢?別急,我們接着往下看:
我們在master分支做出如下修改:
我們切回到testbranch分支,發現還是我們修改前的代碼:
我們可以通過這樣的操作,將所有分支都和master分支進行同步,然后就會發現,testbranch分支里的代碼已經被修改了。
git rebase master
魔術場景五:Fork + Pull request
為了解決開源社區松散團隊的協作問題,Github提供了Fork+ Pull request的協作開發工作流程。
當你想更正別人倉庫里的Bug或者向別人倉庫里貢獻代碼時,要走Fork+ Pull request的協作開發工作流程:
- 1 先 fork(分叉) 別人的倉庫,相當於拷貝一份;
- 2 做一些 bug fix或其他的代碼貢獻;
- 3 發起 Pull request 給原倉庫;
- 4 原倉庫的所有者 review Pull request,如果沒有問題的話,就會 merge Pull request 到原倉庫中。
而這就是Git的一些簡單又實用的方法了!Git是不是很神奇呢?
參考文獻
1.https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
2.https://blog.csdn.net/qq_42852004/article/details/90057151
3.https://www.cnblogs.com/runnerjack/p/9342362.html
4.https://blog.csdn.net/nrsc272420199/article/details/85555911