git的簡單使用

hy_發表於2019-05-02

使用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不會追蹤其中的變化,推到遠端時也不會推到遠端

好啦,就寫那麼多,主要是給自己看的,也不管具體的細節了,不好意思了,浪費點開這篇文章的讀者:)