1. 程式人生 > >git 管理專案

git 管理專案

1.gitlab管理專案
詳情參考:https://blog.csdn.net/a_small_insect/article/details/79277570

2.git本地配置
2.1 下載git工具 https://git-scm.com/downloads 並安裝,網上有教程
2.2 開啟git bash here,設定全域性環境變數,一般設定為gitHub或gitLab名和郵箱

git config --global user.name “xxx”
git config --global user.email “[email protected]

一般配置使用者名稱和使用者郵箱地址即可,用來標識身份
檢視全域性變數列表:

git config --global --list

3.專案管理規範
不獻醜了

4、專案管理Git操作流程
4.1 在專案所在目錄初始化本地倉庫

git init

4.2 拉取遠端專案到指定本地目錄,有兩種方法
①克隆

git clone <專案地址> <本地目錄> //如果專案資料夾為空,則克隆失敗

檢視專案遠端克隆地址

git remote -v

刪除關聯的遠端倉庫,刪除後可重新關聯

git remote rm origin

②先關聯遠端倉庫再新增遠端倉庫檔案到本地

git remote add origin <專案地址>
git pull origin master

4.3 提交專案程式碼
4.3.1 建立本地分支並將檔案提交到該分支
首先需要有修改過或者新增檔案,在任意分支下新增檔案到Git庫的索引(index)

git add . //所有修改過或新增檔案,如只新增某個檔案,“.”可以換成<該檔名.格式>,例如:git add 11.txt

①未提交過程式碼,要先提交才能建立分支
提交儲存到Git庫

git commit -m “提交內容” //一般用這個
git commit -a -m ”提交內容” //提交全部修改過的檔案
git log //檢視提交歷史

建立分支並切換

git branch <子分支名> <父分支名> //父分支可省略,一般為master
git branch //檢視本地分支
git branch -r //檢視遠端分支
git branch -a //檢視所有分支,包括本地和遠端
git checkout <分支名> //切換到分支
git checkout -b <分支名> //新建分支並切換到該分支,父分支為遠端分支時,栗子:git checkout -b dev origin/dev

②已提交過程式碼,可直接建立分支再切換提交
先切換到要提交的分支,再提交:

git checkout <分支名>
git commit -m “提交內容”

4.3.2 將本地分支提交到遠端分支(先更新再提交)
①不合並分支直接push到遠端分支
把遠端分支最新程式碼pull到本地分支,分支名最好保持一致,遠端主機名一般為origin,可通過git branch -r 檢視遠端主機名

git pull <遠端主機名> <遠端分支名>:<本地分支名>

提交本地分支到遠端分支,如遠端分支不存在,將新建該遠端分支

git push <遠端主機名> <本地分支名>:<遠端分支名>

②合併分支後再push到遠端分支(選擇在本地倉庫中去合併,為的是合併分支過程中,一旦衝突,方便解決。)
合併分支,先切換到要push的本地分支再合併(如hotfix)

git checkout <本地分支>//一般合併到預設分支master
git merge <分支名> // (hotfix)
git log --graph //檢視分支合併圖

如果彈出編輯器編輯commit資訊,輸入、儲存並關閉後,出現冒號":",輸入"wq"即可退出編輯器,詳情見5.6
push過程同上
4.3.3 如果分支不再使用要刪除本地分支,但不能刪除當前分支

git branch -d <分支名>
git branch -D <分支名>//強制刪除沒有合併的分支

刪除遠端分支

git push origin :<遠端分支名>

git push origin --delete <遠端分支名>

5、 常用命令
5.1 檢視狀態
詳細列出當前目錄所有還沒有被git管理的檔案和被git管理且被修改但還未提交(git commit)的檔案

git status 

簡短輸出

git status -s

5.2 衝突分為兩種:pull衝突和merge衝突
git status 檢視存在的衝突,開啟檔案進行修改,可在修改前暫存程式碼:git stash save “message”,修改後git add . (有個.)新增檔案到庫,然後git commit -m “內容”提交,提交後看執行程式能否成功,能執行再push
5.3 進度儲存與刪除
儲存尚未提交的當前工作進度,包括暫存區和工作區的改動

git stash save “” //註釋

顯示儲存進度的列表

git stash list 
git stash pop [--index][stash_id] //有時候恢復後要commit 才能checkout,否則報錯,或者可以回退到merge前git reset --merge
//恢復最新的進度到工作區。git預設會把工作區和暫存區的改動都恢復到工作區。
git stash pop 
//恢復最新的進度到工作區和暫存區。嘗試將原來暫存區的改動還恢復到暫存區,不一定成功
git stash pop --index 
//恢復指定的進度到工作區。stash_id是通過git stash list命令得到的,通過git stash pop命令恢復進度後,會刪除當前進度。
git stash pop [email protected]{1} 
//除了不刪除恢復的進度之外,其餘和git stash pop 命令一樣。
git stash apply [--index][stash_id] 
//刪除一個儲存的進度。如果不指定stash_id,則預設刪除最新的儲存進度。
git stash drop [stash_id] 
//刪除所有儲存的進度。
git stash clear 

5.4 釋出版本

git tag <標籤名> <分支名>
git tag //檢視版本

5.5 刪除檔案
當我們需要刪除暫存區或分支上的檔案, 同時工作區也不需要這個檔案了, 可以使用

git rm file_path
git commit -m 'delete somefile'
git push

當我們需要刪除暫存區或分支上的檔案, 但本地又需要使用, 只是不希望這個檔案被版本控制, 可以使用

git rm --cached file_path
git commit -m 'delete remote somefile'
git push

5.6 vim編輯器的簡單使用

vim <檔案> //建立檔案並編輯
shift + c 或者 i//進入編輯狀態
esc //退出編輯狀態
:w 儲存檔案但不退出vi
:w file 將修改另外儲存到file中,不退出vi
:w! 強制儲存,不推出vi
:wq 儲存檔案並退出vi
:wq! 強制儲存檔案,並退出vi
:q 不儲存檔案,退出vi
:q!不儲存檔案,強制退出vi
:e! 放棄所有修改,從上次儲存檔案開始再編輯
cat <檔案> //檢視檔案內容

5.7 git diff
用於比較兩次修改的差異
①比較工作區與暫存區

 git diff 不加引數即預設比較工作區與暫存區

②比較暫存區與最新本地版本庫(本地庫中最近一次commit的內容)

git diff --cached [<path>...] 

③比較工作區與最新本地版本庫

git diff HEAD [<path>...] 如果HEAD指向的是master分支,那麼HEAD還可以換成master

④比較工作區與指定commit-id的差異

git diff commit-id [<path>...] 

⑤比較暫存區與指定commit-id的差異

git diff --cached <commit-id> <path>... 

⑥比較兩個commit-id之間的差異

git diff <commit-id> <commit-id>

⑦使用git diff打補丁
git diff > patch
//patch的命名是隨意的,不加其他引數時作用是當我們希望將我們本倉庫工作區的修改拷貝一份到其他機器上使用,但是修改的檔案比較多,拷貝量比較大,
    此時我們可以將修改的程式碼做成補丁,之後在其他機器上對應目錄下使用 git apply patch 將補丁打上即可

git diff --cached > patch //是將我們暫存區與版本庫的差異做成補丁
git diff --HEAD > patch //是將工作區與版本庫的差異做成補丁
git diff Testfile > patch//將單個檔案做成一個單獨的補丁

拓展:git apply patch 應用補丁,應用補丁之前我們可以先檢驗一下補丁能否應用,git apply --check patch 如果沒有任何輸出,那麼表示可以順利接受這個補丁
另外可以使用git apply --reject patch將能打的補丁先打上,有衝突的會生成.rej檔案,此時可以找到這些檔案進行手動打補丁
5.8 git clean
刪除沒有 git add 的檔案

git clean -n //顯示將要刪除的檔案和目錄
git clean -df //刪除檔案
git clean -f //刪除檔案和目錄

5.9 git rm 和 rm 的區別
用 git rm 來刪除檔案,同時還會將這個刪除操作記錄下來;
用 rm 來刪除檔案,僅僅是刪除了物理檔案,沒有將其從 git 的記錄中剔除。
直觀的來講,git rm 刪除過的檔案,執行 git commit -m “abc” 提交時,會自動將刪除該檔案的操作提交上去。
而用 rm 命令直接刪除的檔案,單純執行 git commit -m “abc” 提交時,則不會將刪除該檔案的操作提交上去,需要在執行commit的時候,多加一個-a引數,
即rm刪除後,需要使用git commit -am "abc"提交才會將刪除檔案的操作提交上去。
5.10 git fetch
大致來說,git pull 包括 git fetch 和 git merge
詳情參考:https://www.cnblogs.com/ToDoToTry/p/4095626.html
5.11 分支合併方式有兩種:git rebase 和 git merge
git rebase :衍合
當合並衝突時,解決衝突後提交時,git rebase 可以得到一個更加簡潔的提交歷史
衍合有風險,必須遵循如下:
一旦分支中的提交物件釋出到公共倉庫,就千萬不要對該分支進行衍合操作。
詳情參考:https://www.cnblogs.com/pinefantasy/articles/6287147.html
5.12 git reset
回退到指定版本

git reset //當前分支所在版本號
git reset <版本號>//回滾到某個版本號
git reset (–mixed) HEAD~1 //HEAD~1可換成<版本號>,回退到指定版本
//回退一個版本,且會將暫存區的內容和本地已提交的內容全部恢復到未暫存的狀態,不影響原來本地檔案(未提交的也不受影響) 
git reset –soft HEAD~1 
//回退一個版本,不清空暫存區,將已提交的內容恢復到暫存區,不影響原來本地的檔案(未提交的也不受影響) 
git reset –hard HEAD~1 
//回退一個版本,清空暫存區,將已提交的內容的版本恢復到本地,本地的檔案也將被恢復的版本替換

5.13 git revert
需要反做某個版本時,git revert <需要反做的版本號>,將新建一個版本號,此版本號與需要反做的版本的前一個版本一致
適用場景: 如果我們想恢復之前的某一版本(該版本不是merge型別),但是又想保留該目標版本後面的版本,記錄下這整個版本變動流程,就可以用這種方法。
詳情參考:https://blog.csdn.net/yxlshk/article/details/79944535

6、 其他

git --help //幫助

“<“和”>” 為特殊符號,不可識別

rm -rf <檔案/倉庫地址> //強刪檔案,包括本地倉庫和遠端倉庫
ls //檢視檔案
ls //檢視內部檔案,包括隱藏檔案
cd .. //回退,檔名不區分大小寫
mkdir <目錄名> //建立目錄