源代碼管理的基本操作:
1.創建版本庫
• sudoapt-get install git 先安裝git
• 先創建目錄,作爲倉庫
• gitinit 初始化倉庫,可以發現當前目錄下多了一個.git的目錄,這個目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動修改這個目錄裏面的文件,不然改亂了,就把Git倉庫給破壞了
• vim readme.txt 新建一個文本文件,比如往裏面添加簡單的一行字符串
• git add readme.txt 添加一個文件,比如readme.txt,如果目錄裏面的所有文件都要添加,可以git add *
• git commit-m "添加一個readme.txt文件" 將文件提交到倉庫,並加上說明(這時候是版本1)
• 如果是第一次使用git,那麼git commit可能報錯,所以需要你配置一些個人信息
• git config --global user.email"[email protected]" 配置郵件
• git config --global user.name "YourName" 配置用戶名
• 必須配置,否則後面的commit、push到遠程庫都會失敗
• 然後再次git commit -m "添加一個readme.txt文件" 纔會成功
2.提交修改
• 假如此時第一次修改了readme.txt文件
• git status 讓我們時刻掌握倉庫當前的狀態。這時告訴我們,readme.txt被修改過了,但還沒有準備提交的修改。
• git diff readme.txt 查看對readme.txt做了什麼修改
• git add readme.txt 提交修改和提交新文件是一樣,先git add
• git status 可以再用git status查看倉庫的當前狀態,告訴我們,將要被提交的修改包括readme.txt
• git commit-m "第一次修改" 然後再git commit,並添加修改的描述(這時候是版本2)
• git status 可以再執行git status看倉庫狀態,因爲所有的都提交了,Git告訴我們當前沒有需要提交的修改,而且,工作目錄是乾淨(working directory clean)的。
3.版本回退
• 可以像上面所說的那樣不停的提交新的文件、提交對文件的修改
• 這時候第二次修改readme.txt文件
• git add readme.txt 先git add
• git commit -m "第二次修改" 提交第二次修改(這時候是版本3)
• git log 顯示從最近到最遠的提交日誌,具體顯示的內容自己試一試看看
• git log --pretty=oneline 如果嫌輸出信息太多,看得眼花繚亂,試試加上--pretty=oneline參數
• 看這篇教程去理解爲什麼Git的版本號要這麼長,Git的版本號類似:3628164fb26d48395383f8f31179f24e0882e1e0這樣的特別長的十六進制數。
• git reset --hard HEAD^ 會回退到上一個版本,也就是從版本3回退到版本2
• 在Git中,用HEAD表示當前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
• vim readme.txt 可以看到此時的readme.txt文件就是版本2時候的內容,回退成功!
• git log 此時看到版本3的信息沒有了
• git reset --hard 3628164 通過命令行上的歷史信息
• vim readme.txt 看到的是第三版本的readme.txt文件的內容,所以又回來了
4.工作區、版本庫和暫存區
工作區:就是在電腦裏能看到的目錄,比如我的learngit文件夾就是一個工作區。
版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
暫存區:Git的版本庫裏存了很多東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。
前面講了我們把文件往Git版本庫裏添加的時候,是分兩步執行的
i. 第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
ii. 第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因爲我們創建Git版本庫時,Git自動爲我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。
可以簡單理解爲,需要提交的文件修改通通放到暫存區,然後,一次性提交暫存區的所有修改。
5.管理修改
• vim readme.txt 編輯文件,比如添加新的一行
• git add readme.txt 添加,但是不提交
• vim readme.txt 再編輯文件,比如再添加一行
• git commit -m "修改兩次,添一次,提交一次" 提交
• git status 看到的效果是:只提交了第一次的修改,第二次的修改沒有提交
那怎麼提交第二次修改,可以繼續git add再git commit,也可以先git add第二次修改,再git commit,也就是第一次修改 -> git add -> 第二次修改 -> git add -> gitcommit,就相當於把兩次修改合併後一塊提交了。
6.撤銷修改
第一種情況
• 修改了readme.txt文件,還沒有git add 和git commit
• 但是在你提交之前發現這次修改有問題。既然錯誤發現得很及時,就可以很容易地糾正它。你可以手動把文件恢復到上一個版本的狀態。
• git checkout -- readme.txt 也可以通過命令撤銷修改,這條命令的意思就是,把readme.txt文件在工作區的修改全部撤銷
• 無論是文件修改後值存在於工作區還沒有放到暫存區,還是已經添加到暫存區,總之這個命令就是讓這個文件回到最近一次git commit或git add時的狀態。
• 查看文件,內容果然復原了。git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令,我們在後面的分支管理中會再次遇到git checkout命令。
第二種情況
• 修改了readme.txt文件,而且執行了git add readme.txt
• 慶幸的是你在 git commit 之前發現了這個問題
• git status 查看一下,修改只是添加到了暫存區,還沒有提交
• git reset HEAD readme.txt 可以把暫存區的修改撤銷掉,重新放回工作區。git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。
• git status 查看一下,現在暫存區是乾淨的,工作區有修改
• git checkout -- readme.txt 還記得第一種情況中如何丟棄工作區的修改吧
7.刪除文件
在Git中,刪除也是一個修改操作
• 添加一個新的文件 test.txt
• git add test.txt
• git commit test.txt -m "再次新增一個文件"
• 一般情況下,通常會在文件管理器中把沒用的文件刪除,或者直接rm test.txt
• git status 這個時候,Git知道刪除了文件,因此,工作區和版本庫就不一致了,git status命令會立刻告訴哪些文件被刪除了
• 現在有兩個選擇,一是確實從版本庫中刪除該文件,那就git rm test.txt,然後git commit 文件就從版本庫中刪除了
• 另一種情況是刪除錯了,因爲版本庫裏還有,所以可以輕鬆地將誤刪除的文件恢復到最新版本git checkout -- test.txtgit checkout其實使用版本庫中的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原“。
下面是我們組上手操作的實驗過程截圖:
- 首先 start a project
- 建立 blockChain
- 組隊
- cmd 下 打開 git
- 輸入 新建文件夾:new project 的路徑
- 配置 用戶名、郵箱
- 將本地電腦中的項目 與 github 進行關聯,生效
- 組員 獲取組長項目
- 組員 通過 fork,對文件進行修改
- 組員 通過 create pull request 發起修改申請
- 組長 查看pull request,並通過 merge pull request 決定是否同意修改組員的申請。