使用git第一步百度git到官網下載軟體包傻瓜式安裝即可。
安裝後開啟git bash,輸入:
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
複製程式碼
目的是給當前電腦繫結一個賬號,這樣你把當前電腦中的本地倉打版本,push到遠端倉的時候才能辨識是哪個賬號的操作。
倉庫的英文名稱:repository
初始化一個倉庫:
在git bash中建立一個資料夾作為git倉庫,名稱隨意:
mkdir git-demo複製程式碼
進入資料夾並初始化一個新git倉庫:
cd git-demo
git init
複製程式碼
git-demo目錄下會有個.git的隱藏目錄,這是git倉庫必需目錄,請勿刪除
打版本:
在git-demo下創造檔案或資料夾:
git add .
git commit -m 'init repository'複製程式碼
將資料夾(工作區)中的所有檔案存到暫存區
將暫存區的檔案修改打一個版本,版本記錄中的文字方便使用者瞭解那次打版本時的主要修改
git status複製程式碼
檢視當前工作區的修改情況,如果檔案修改了會提示要git add了,如果將修改存到暫存區了,則提示需要git commit了。如果工作區沒有任何修改,則倉庫是乾淨的
git log複製程式碼
上條命令可以檢視當前倉庫下的提交記錄
git log --pretty=oneline複製程式碼
將每次提交記錄列印成1行,顯示的長串字串是 commit id
回退版本:
git reset --hard HEAD^複製程式碼
將當前版本回退到上一次提交的版本,版本回退的本質就是在工作區的檔案中所做的修改都將刪除,將檔案的內容還原到沒有修改之前
git reflog複製程式碼
用來檢視每次操作的記錄,可以找到每次提交的commit id
git reset --hard commit_id複製程式碼
將某次提交的commit id找到,即可將版本定位到那裡
工作過程中經常需要將對檔案的修改撤銷掉,或者已經將修改儲存到暫存區,需要將暫存區的修改撤銷掉(unstage),這用指令不靈活,建議使用vscode編輯器自帶的git選單,點選即可實現效果
在工作區刪除檔案也是如此,檔案刪除,git版本庫裡還有,可以提交版本將版本庫裡的檔案也刪除了,或者撤銷刪除,也可以通過vscode來實現
遠端倉庫:
在當前電腦生成公鑰和私鑰,目的是將程式碼推送到遠端倉庫時,gitlab或github可以識別你的電腦有推送許可權:
ssh-keygen -t rsa -C "youremail@example.com"複製程式碼
在本機電腦的使用者主目錄下會有公鑰和私鑰的檔案id_rsa和id_rsa.pub,到檔案中將公鑰貼上到gitlab或github的賬號設定中即可
本地已經有了一個倉庫,在GitHub上新建一個倉庫,在本地工作區中開啟git bash,關聯本地庫和遠端庫:
git remote add origin git@github.com:yourname/your-repository-name.git複製程式碼
將本地庫和遠端庫關聯後,將本地庫master分支的內容第一次push到遠端倉的master分支:
git push -u origin master複製程式碼
-u 的目的是本地master分支和遠端master分支關聯,以後本地master分支修改提交了版本直接按照下面的指令push到遠端倉的master即可
git push origin master複製程式碼
克隆一個遠端庫到本地:
git clone xxx.git複製程式碼
分支管理:
在master分支下建立dev分支,則dev分支的版本同master一致:
git checkout -b dev複製程式碼
在dev分支下對檔案做了修改,只是這個分支上的事,master分支沒有記錄,
檢視分支,切換到其他分支
git branch
git checkout master複製程式碼
當dev分支提交的版本過多時,而master分支還只是停留在建立dev分支時的版本,需要將dev分支的版本合併到master分支,可以通過快速合併分支到當前分支:
在master分支下快速合併dev分支:
git merge dev複製程式碼
這裡的合併就是將master直接指向dev最新的版本上
合併後刪除dev分支:
git branch -d dev
git branch複製程式碼
還有一種情況,當dev分支修改了某個檔案的某個地方,提交了commit,master分支也被人在那個檔案的那個地方做了修改並commit,然後你執行git merge dev就無法快速合併了,這樣會衝突,git會把dev分支的修改塞進master,這時候用vscode檢視
當團隊有人在dev分支上提交了程式碼產生新的版本,而你從dev分支拉下來的程式碼是之前的版本,並且做了修改,你打了版本後正準備把修改推送到遠端庫中,用git先pull再push,但pull下來後大家都修改到的地方就產生衝突啦,這時候你需要手動到檔案中要麼將他的修改刪了用你的修改,要麼反之,要麼就是你再想想用保留二者的修改,完成後最後提交一個版本,push到遠端庫即可
合併dev分支到master分支,可以不使用快速合併:
git merge --no-ff -m 'merge dev to master' dev複製程式碼
合併後可以檢視master的提交log,列印得好看些:
git log --graph --pretty=oneline --abbrev-commit複製程式碼
stash:
比如dev分支下做了修改,功能還沒做好,不能打版本推到遠端,這時候又要去改bug,可以將工作區的修改儲藏起來:
git stash複製程式碼
這樣工作區中剛剛的修改就被藏到stash中了,然後去做其他事,做完了回來接著修改,但現在工作區中之前的修改需要還原:
檢視stash列表:
git stash list複製程式碼
將工作區的修改還原,並把之前生成的那個stash刪了
git stash pop複製程式碼
強制刪除分支:
刪除一個從未合併到其他分支的分支,比如在dev-xiaoming分支下寫了程式碼,但寫好了老闆不要該功能了,則強制刪除該分支即可:
git branch -D dev-xiaoming複製程式碼
檢視遠端庫資訊:
git remote -v
git remote show origin複製程式碼
根據遠端庫的dev分支新建本地dev分支:
遠端庫新增dev分支啦,本地克隆了該庫預設只有master分支的,根據遠端庫的dev分支新建本地dev分支,以後可以推到遠端庫的dev上去:
git checkout -b dev origin/dev複製程式碼
關聯本地dev和遠端dev:
git branch --set-upstream-to=origin/dev dev複製程式碼
在本地dev分支上做了修改,直接推不上去說明遠端dev分支有新的推送了,你的本地版本過老,要先pull,拉下來報錯啦,因為本地做的修改與遠端庫中他人寫的新版本中的修改衝突啦,手工解決衝突,commit 再 push即可
標籤:
每次打版本都有一個commit id很難記,可以給每個commit 打一個標籤,在工作區下:
git tag v0.0.1複製程式碼
檢視所有標籤:
git tag複製程式碼
預設打的標籤會打在最近的那個commit上,也可以將標籤打在任意一個commit上,找到它的commit id即可:
git tag v0.0.0 f399238複製程式碼
檢視標籤資訊:
git show v0.0.0複製程式碼
刪除標籤:
git tag -d v0.0.0複製程式碼
建立的標籤預設只會存在本地倉庫,上面刪除標籤指令只能刪除本地的標籤,可以將標籤推送到遠端庫:
git push origin v0.0.1
git push origin --tags複製程式碼
刪除本地標籤後可以刪除遠端庫的標籤:
git push origin :refs/tags/v0.0.1複製程式碼
刪除關聯的遠端庫origin:
git remote rm origin複製程式碼
新增多個遠端庫:
git remote add github git@github.com:yourname/xxx.git
git remote add gitee git@gitee.com:yourname/xxx.git複製程式碼
git remote -v複製程式碼
推送到多個不同的遠端庫:
git push github master
git push gitee master複製程式碼
.gitignore檔案放git忽略管理的檔案或目錄,git不會追蹤其中的變化,推到遠端時也不會推到遠端
好啦,就寫那麼多,主要是給自己看的,也不管具體的細節了,不好意思了,浪費點開這篇文章的讀者:)