1. 程式人生 > >初識Git-一些常用的Git指令

初識Git-一些常用的Git指令

今天的專案用到了Git,先是要求我們clone遠端倉庫的工程,然後自己在本地進行修改之後,再提交回遠端倉庫。
首先貼上Git的工作流程圖:
Git流程圖
1)clone 專案
在我們想要儲存專案的路徑下,開啟Git bash,輸入clone指令,
基本語法是: git clone dest_url, 示例如下:

git clone https://rdc.hand-china.com/gitlab/20685/Git-Test.git

操作完成後,提示如下,由於我 clone的是剛新建的新專案,所以提示我” cloned an empty repository.”
Git-clone
這個時候,再看我們的目標路徑,新生成了一個空的Git-Test 工程資料夾,並且有一個隱藏的.git資料夾,作為Git的本地倉庫
Git-clone-new file


注:當我們進行首次clone時,若不是clone的公開專案,則會提示我們輸入賬號和密碼(若clone失敗,可以嘗試先在本地目標資料夾中初始化本地倉庫,語法: git init)

2)向本地倉庫中新增檔案
當完成 clone 後,需要先向本地倉庫中新增一下檔案,新增完成後才能進行分支的建立,否則會報 fatal: Not a valid object name: ‘master’錯誤,因為剛建立的git倉庫需要在第一次commit之後才會真正建立
語法格式:git add fileName.xx (常用 git add . 表示將所有檔案新增至倉庫中) , 示例如下
git add .
新增所有檔案至本地倉庫


新增檔案完成後,最好加上本地更新的描述
語法格式:git commit -m”add describe” , 示例如下
git commit -m”Init Local Warehouse After Clone”
新增更新描述
從圖中的資訊可以看出,我在master分支中建立了 兩個 readme檔案
注:因為我測試用的遠端倉庫之建立了一個空資料夾,而git在識別檔案時會過濾掉所有的空資料夾,所有我在本地新增了兩個readme檔案

3)建立本地分支
當我們第一次從遠端倉庫clone下專案並完成初始化後,往往需要在自己的開發環境中建立本地分支進行開發。並且在本地分支進行的開發工作並不會影響到主分支和其它分支的開發程序。
語法格式:git branch branchName,(當不輸入分支名時,為檢視所有分支資訊)示例如下
git branch test
建立本地分支


從圖中可以看出,我新建的兩個分支,不過目前仍停留在master分支上(master)

4)切換到本地分支進行開發
完成分支建立後,預設不切換到新建立的分支中,需要進行手動的分支切換,否則仍是在原分支中進行開發
語法格式:git checkout branchName,示例如下
git checkout test
切換到新建分支
從圖中可以看出來,此時已經在test分支上了(test),現在所做的所有開發都對主分支沒有影響
擴充套件:git checkout -b branchName 建立分支並切換到新建分支中(若存在同名分支,則會建立失敗),示例如下
git checkout -b test1
git checkout -B branchName 建立分支並切換到新建分支中(若存在同名分支,不會建立失敗,將會覆蓋同名分支),示例如下
git checkout -B test2
建立並切換到新分支的兩種方式
從圖中可以看出,採用 -b 的方式第二次建立 test2分支時失敗了,提示已經存在了“test2”分支,採用 -B 的方式建立 test2分支成功,並提示已重置test2分支

5)合併分支
當某一分支的功能需求開發完成之後,可以將該分支合併至主分支中(合併分支將其它分支合併到當前分支中,若要合併到主分支中需提前切換到主分支)
語法格式:git merge branchName 示例如下
git merge test
合併分支
我在test分支中建立了一個 test.txt 檔案,add 和 commit 之後,就只能在 test 分支中才能檢視到 test.txt 檔案,當我切換到master分支完成合並之後,才能在master分支中檢視到 text.txt 檔案
注:在分支合併的過程中,很容易就出分支衝突的問題(在不同分支中修改了同名檔案,且修改的部分有重合),
兩種方式:1)對發生衝突的檔案進行手動修改,修改完成後將修改後的檔案進行 add 和 commit,即可完成衝突的解決
2)放棄合併,使用 git merge –abort 命令,拋棄合併,並重建合併前的狀態,
但是,當合並前若存在未 commit 的檔案,那麼在合併中被修改的未 commit 的檔案將難以被重建
建議:在分支合併 git merge 前,如果仍存在大量未被 commit 的 檔案, 可使用 git -stash 將未 commit 的檔案暫存,
若合併過程中發生衝突,解決衝突後使用 git stash pop 可以將未commit的檔案還原

6)刪除分支
對於重複建立,或者已經完成了開發任務的分支可以選擇對齊進行刪除
語法格式:git branch -d branchName , 示例如下
git branch -d test
刪除分支
注意:需要刪除已經commit 但是未 合併的分支時,需要用 git branch -D branchName 進行刪除
對於,誤刪除的分支,可以先使用 git log -g 找回之前提交的 commit,
再使用 git branch recover_branch_newBranch commitId 進行回退 示例如下
git log -g
git branch revoery_test 796c1e7eb812beb88d58f7f34135e6bf06470ca7
git checkout revoery_test
恢復誤刪分支
可以看到恢復的分支裡仍然有被刪除前的檔案資訊

7)向遠端倉庫進行拉取和提交
當你完成了本地功能的開發,或者取得了進展之後,可以向遠端倉庫進行提交
提交前需要進行pull,將其他人對遠端倉庫的修改更新至本地,示例如下
語法格式:git pull <遠端主機名> <遠端分支名>:<本地分支名>
eg:git pull origin master:master
表示將遠端的master分支拉回至本地,並於本地的master分支進行合併

完成pull後,即可進行push
語法格式:git push <遠端主機名> <本地分支名>:<遠端分支名>
eg: git push origin master : master
注:當省略遠端分支名時,會將本地分支推送至遠端同名分支上,若遠端同名分支不存在則會被建立
當省略遠端分支和本地分支時,表示將當前分支推送到遠端對應分支上,
(第一次推送會提示使用 git push –set-upstream origin branchName 建立遠端與本地的追蹤關係)
git push origin –delete branchName 表示刪除遠端的指定分支