介紹
git是分布式版本控制系統
集中式與分布式:集中式有一個中央服務器,需要聯網進行操作,分布式,每個人都有一個版本庫
1. 安裝git
-
下載git->安裝完成后找到git bash,打開是一個命令列(說明安裝成功)
-
在命令列輸入以下
引號內部填自己資訊
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
2. 創建版本庫
版本庫又名倉庫,英文名repository
使用
git有三個區,作業區,暫存區,版本庫,作業區add之后就進入了暫存區,暫存區的檔案commit之后進入版本庫
1. 添加
注:以下檔案名都帶后綴
git add "檔案名"
2. 提交
注意:提交是將暫存區的檔案都提交到版本庫里
git commit -m "操作名稱"
3. 查看狀態
git status
4. 查看檔案內容
cat "檔案名"
5. 查看git日志
git log
如:commit后接的就是版本號,隨機生成的
commit 980993de744a8886692ed79fc7f4cdd00ec15959 (HEAD -> master)
Author: zouyou <>
Date: Sat Apr 11 14:35:04 2020 +0800
update commit
commit ea799348f2b1ccc7d046f8bd61c6b193b79bdc18
Author: zouyou <>
Date: Sat Apr 11 14:33:07 2020 +0800
git tracks changes
- 回退版本:
- 使用HEAD
git reset --hard HEAD^ HEAD^:上個版本 HEAD^^:上上版本
- 使用版本號,只需要寫前幾個數就行
git reset --hard ea799348f
如果忘記了版本號,可以使用reflog查看歷史的變化,不管有沒有回退
git reflog
6. 查看檔案變化
git diff
7. 撤銷修改
- 撤銷作業區的修改,相當于直接操作檔案,將改變撤銷,
git restore 檔案名
- 撤銷暫存區的提交,退回到作業區,但是檔案還是修改過后的,要想檔案撤銷修改,重復1步驟
git resore --staged 檔案名
8. 洗掉檔案
- 要同時洗掉作業區以及版本庫,洗掉作業區可以手動洗掉等,,以下是洗掉版本庫
git rm 檔案名
- 誤刪作業區檔案,但是已經上傳到版本庫了,可以通過版本庫恢復
git checkout 檔案名
9. 遠程倉庫:github
- 在github上創建一個倉庫,記住ssh碼或者https地址
- 輸入以下,創建遠程連接,會有輸入賬號密碼
$ git remote add origin (ssh碼)/(hhtps)
- 將檔案上傳到github
$ git push -u origin master
注:由于遠程庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令,
上傳完成之后,只要本地進行了commit,就可以通過以下命令
git push origin master //這里與上面是差不多一樣的語法
總結:要關聯一個遠程庫,首先在遠程創建好一個庫,記住SSH碼,再進行連接 git remote add origin ssh碼
上傳:第一次上傳時git push origin -u master,之后就不用加-u了 git push origin master
這些命令里面,origin其實就是遠程倉庫的名字,通常命名為origin
- 從遠程倉庫克隆到本地
首先在github上找到一個倉庫再復制其ssh碼,在git bash上輸入命令列
git clone ssh碼
注意:在哪個檔案夾打開的git bash就克隆到哪個檔案夾下面,
10. 分支管理
1. 分支介紹
分支可以實作類似于開發版系統,完成之后再推送到主干,就是穩定系統,如下,兩個分支合并到主干
在git中,master分支是主干,一開始master指向這根主線,head指向master,所以head是充當一個指向當前點的指標,可以指向主干,也可以指向分支,
查看分支,顯示所有分支,當前分支前會有*
git branch
2. 分支創建
創建一個分支dev并切換到此分支 -b的作用是創建并切換
git checkout -b dev
等價于
git branch dev //創建分支dev
git checout dev // 切換到分支dev
注意:每一個分支的作業區,暫存區,版本庫都是獨立的,切換分支之后,都會不一樣,
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch
切換分支:git checkout 或者git switch
創建+切換分支:git checkout -b 或者git switch -c
合并某分支到當前分支:git merge
洗掉分支:git branch -d
查看分支圖:git log --graph
-- 檔案沖突
出現這種情況,兩個分支無法merge,必須手動解決,
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
git status也可以顯示沖突檔案,在沖突檔案里打開可以看到標記,
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容
3. bug分支
當正在分支dev上進行一個作業時,突然要修復一個bug(如在主干上),所以需要先將dev正在進行的作業隱藏一下,先去把bug修復,Git還提供了一個stash功能,可以把當前作業現場“儲藏”起來,等以后恢復現場后繼續作業:
git stash //可以將在暫存區的檔案(還未提交)隱藏,使用status也看不到
可以查詢stash里隱藏的東西
git stash //=>例如:stash@{0}: WIP on dev: f52c633 add merge
修復完master的bug之后,恢復dev的現場:
git stash aplly //對現場進行恢復,此時stash里還有,需要進一步
git stash drop //對stash里的東西洗掉
同時還可以從stash里一步步恢復:git stash apply stash@{0}
等價于一句話
git stash pop
注:由于dev本來就是master的分支,那么dev也可能存在主干剛剛修復的bug,所以git有個功能可以實作bug的修復復制,由此可以推出,可以在分支解決bug在主干復制即可
git cherry-pick <版本號>
這里的版本好就是剛剛在主干修復bug后commit之后的版本號
開發一個新feature,最好新建一個分支,類似于bug分支;
如果要丟棄一個沒有被合并過的分支,可以通過git branch -D 強行洗掉,
4. 遠程合作
要查看遠程庫的資訊,用
git remote //通常遠程庫是origin
也可以用git remote -v,可以回傳抓取和推送的地址,如下
origin https://github.com/zy116/first-blog.git (fetch)
origin https://github.com/zy116/first-blog.git (push)
-- 推送分支
git push origin dev //推送分支
git push origin master //推送主干
但是,并不是一定要把本地分支往遠程推送,那么,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要時刻與遠程同步;dev分支是開發分支,團隊所有成員都需要在上面作業,所以也需要與遠程同步;- bug分支只用于在本地修復bug,就沒必要推到遠程了,除非老板要看看你每周到底修復了幾個bug;
- feature分支是否推到遠程,取決于你是否和你的小伙伴合作在上面開發,
總之,就是在Git中,分支完全可以在本地自己藏著玩,是否推送,視你的心情而定!
-- 抓取分支
通常都會在master和dev分支分別推送各自的更改,當一個人把自己的分支都推送上去之后,另一個人克隆下來的只能看到master分支,如果要在dev分支上開發,必須建立一個遠程分支到本地
git switch -c dev origin/dev
當另一個人推送上了一個東西后,你也要推送,此時就會發生矛盾,另一個人的最新提交和你試圖推送的提交有沖突,
此時會提示你進行git pull操作,但是會提示錯誤,
需要指定本地dev分支與遠程origin/dev分支的鏈接,設定dev和origin/dev的鏈接
git branch --set-upstream-to=origin dev
再進行pull
git pull
這時候pull成功,會在沖突檔案里標注,需要手動解決
因此,多人協作的作業模式通常是這樣:
- 首先,可以試圖用
git push origin <branch>推送自己的修改; - 如果推送失敗,則因為遠程分支比你的本地更新,需要先用
git pull試圖合并; - 如果合并有沖突,則解決沖突,并在本地提交;
- 沒有沖突或者解決掉沖突后,再用
git push origin推送就能成功!
如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream-to origin/,
小結:
- 查看遠程庫資訊,使用
git remote -v; - 本地新建的分支如果不推送到遠程,對其他人就是不可見的;
- 從本地推送分支,使用
git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交; - 在本地創建和遠程分支對應的分支,使用
git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致; - 建立本地分支和遠程分支的關聯,使用
git branch --set-upstream branch-name origin/branch-name; - 從遠程抓取分支,使用
git pull,如果有沖突,要先處理沖突,
感謝廖雪峰大佬的git教程,文中有一些都是直接copy過來的,原教程在這哦 git教程
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/10502.html
標籤:其他
