git版本控制操作
1.1 打開git命令行
此操作均是在Windows下進行,有關軟件安裝,請移步此處※※
首先鼠標在桌面空白地方右鍵選擇Git Bash here
,然後cd
到所要進行版本控制的文件夾。另外一種方法比較簡單,直接選中目標文件夾,右鍵文件夾,選擇Git Bash here
,出現git的命令行界面。如下圖:
這裏已經在桌面創建了一個名爲git_test的文件夾,文件路徑建議全部使用英文,不要出現中文,避免出現不必要的bug。
1.2 新建本地版本庫
在命令行界面輸入以下命令
git init
創建成功後出現以下界面
打開文件夾,會發現git_test目錄下回多出來一個.git
的文件夾(默認是隱藏狀態,需要設置纔可見,但在bash中輸入ls -ah
命令也可見到),這個文件夾就是Git用來進行管理版本庫。千萬不要隨意修改!!!
接着在git_test文件夾下建立了一個新的文件cmd_test.txt
。因爲是在Windows下測試,所以此處需要注意不要用自帶的記事本編輯文本。因爲Windows的記事本會在每個文件的開頭添加0xefbbbf(十六進制)的字符,這樣會出現很多意外的問題。所以這裏是用Notepad++代替記事本打開的,當然也可以在bash中用命令:vim cmd_test.txt
打開。
現在開始提交版本:
第一步:輸入命令git add cmd_test.txt
,把文件添加到倉庫,或者使用git add .
添加所有文件
git add cmd_test.txt
添加所有文件
git add .
有時候會用到只添加某一類型的文件,如只添加所有的txt
格式的文件,類似Linux命令中的操作,命令如下:
git add *.txt
執行上面的命令後,沒有任何顯示,即表示添加成功
第二步:輸入命令git commit -m "描述此次提交的說明"
將文件提交到倉庫。這裏的-m
表示此次提交的說明
git commit -m "首次創建倉庫"
執行結果如上圖:注意這裏方括號中的字符:e358c12,這個字符串很重要,後面再提會用到; 1 file changed
表示一個文件被改動;2 insertion
表示插入了兩行內容,此處示例寫的是:
git init;
創建版本庫
至此版本倉庫的創建和提交操作就結束了。以後每次提交都需要按照此步驟執行,先添加(add操作)文件,再提交(commit操作)到倉庫。
1.3 版本管理
1.3.1 查看提交日誌
使用命令git log
可查看當前分支的歷史提交記錄列表
git log
使用命令git log --follow file
可查看當前分支的歷史提交記錄,例如這裏查看文件cmd_test.txt的歷史提交信息列表
git log --follow cmd_test.txt
1.3.2 版本跳轉
有時候在修改程序後,程序的的內容發生了很大的變化,但修改用來可以運行的程序又十分複雜。這時版本回退如時光穿梭機一樣,可以跳轉到任何已經提交的的版本。其命令如下:
git reset --hard [commit]
這裏的commit可以是分支名稱,也可以是剛纔提到的那個字符串,一般填字符串,因爲每次提交都會產生不同的字符串。如下圖所示,修改文件,添加了兩次提交:
此時用git log
查看提交的信息如下:
這裏可以看到,總共提交了三次,每次的commit id是不一樣,這就方便跳轉到任何版本。比如這時跳轉到添加一次提交:
git reset --hard 08228
輸入id的前面幾位即可,Git會自動找到id,執行結果如下圖:
這裏HEAD可以理解爲一個指向當前版本的指針,而id則是地址,每次跳轉則是HEAD指向不同的地址位置。這個方法就適用於當我們代碼改錯了,或者內容發生很大變化,此時想復原以前的程序時,使用此方法就可輕鬆的實現復原,當然前提要有提交。
如果在退回到第一次提交後,喫個飯回來,發現第二次提交的程序可能只是某個地方的小問題,回去改一下就行,這時怎麼辦?還是利用Git強大的時空穿梭功能。從當前的第一次提交狀態,跳轉到第二次提交的狀態。此時按照上述步驟先用git log
查看提交的信息,執行結果如下:
發現和上次的日誌信息不一樣,這裏沒有第二次提交的日誌信息,這時找不到id,沒辦法跳轉。此時可使用git reflog
命令查看提交記錄
git reflog
執行結果如下:
這裏可以查看每次操作後的情況,也找到第二次提交的id 236ecab
,再次利用reset操作再回到第二次提交的狀態:
git reset --hard 236ecab
執行結果如下,此時已經回到了第二次提交的狀態:
1.4 分支管理
1.4.1 創建、查看分支
在Git中,master爲主分支,當我們每次提交到master後,master分支的線也越來越長。當多人合作開發一個程序時,若都在master裏面開發,這個分支會越來越長,而且隨着提交次數的增多,版本越來越多,可能會出現找不到哪個是自己提交的版本。對此通過Git的分支功能,再給每個人分配一個分支,每個人在所分配的分支完成其功能後,最後合併到主分支,這樣就不會相互影響,從而提高開發效率。
使用命令git branch branchname
來創建分支branchname
,示例如下,這裏創建名爲branch1
的分支:
git branch branch1
使用git branch
來查看分支
git branch
使用git branch -d branchname
來刪除分支branchname
git branch -d branch2
執行結果如下:
這裏首先創建了branch1
和branch2
,接着使用git branch -d branch2
刪除了branch2
,然後查看當前分支列表,可見分支branch2
已經被刪除。
1.4.2 切換分支和分支操作
注意上圖中藍色的字符:(master),括號中的字符串表示當前工作的分支,當前是master分支。切換到branch1
分支命令如下:
git checkout branch1
切換到branch1
分支後,在此分支的操作和在master中的操作均一樣。爲了方便後續演示,我在文件夾下添加了cmd_test1.txt
這個文件。然後執行添加文件,提交版本。提交成功後branch1
分支有兩個文件。
接下來我們切換到master分支,然後用命令ls
查看文件,會發現此時master分支中不包含剛纔添加的cmd_test1.txt
這個文件,這也說明了在其它分支中修改、添加文件,不會改變主分支的狀態。執行結果如下:
從圖中可發現,切換分支後藍色的字符都在變化,即顯示當前工作的分支。
若在分支中完成功能後想合併到另外一個分支,如將branch1
合併到master
主分支。首先切換到目標分支(master),然後輸入命令:git merge branchname
,branchname
爲被合併的分支名稱,示例如下:
git checkout master
git merge branch1
執行結果如下圖,可以看到,此時master
分支下已經包含cmd_test1.txt
文件
此時再使用git log
查看日誌信息如下圖,日誌信息已更新,顯示合併的分支中提交的內容:
TortoiseGit操作以及命令行其他操作後續補充