前端小白的學習之路--git學習

介紹

git是分佈式版本控制系統git

集中式與分佈式:集中式有一箇中央服務器,須要聯網進行操做。分佈式,每一個人都有一個版本庫github

1. 安裝git

  • 下載git->安裝完成後找到git bash,打開是一個命令行(說明安裝成功)bash

  • 在命令行輸入如下服務器

引號內部填本身信息
$ git config --global user.name "Your Name" 
$ git config --global user.email "email@example.com"

2. 建立版本庫

版本庫又名倉庫,英文名repositoryapp

使用

git有三個區,工做區,暫存區,版本庫。工做區add以後就進入了暫存區,暫存區的文件commit以後進入版本庫ssh

1. 添加

注:如下文件名都帶後綴分佈式

git add "文件名"

2. 提交

注意:提交是將暫存區的文件都提交到版本庫裏fetch

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

- 回退版本3d

  1. 使用HEAD
git reset --hard HEAD^   HEAD^:上個版本  HEAD^^:上上版本
  1. 使用版本號,只須要寫前幾個數就行
git reset --hard ea799348f

若是忘記了版本號,可使用reflog查看歷史的變化,無論有沒有回退

git reflog

6. 查看文件變化

git diff

7. 撤銷修改

  1. 撤銷工做區的修改,至關於直接操做文件,將改變撤銷。
git restore 文件名
  1. 撤銷暫存區的提交,退回到工做區,可是文件仍是修改事後的,要想文件撤銷修改,重複1步驟
git resore --staged 文件名

8. 刪除文件

  1. 要同時刪除工做區以及版本庫,刪除工做區能夠手動刪除等。。如下是刪除版本庫
git rm 文件名
  1. 誤刪工做區文件,可是已經上傳到版本庫了,能夠經過版本庫恢復
git checkout 文件名

9. 遠程倉庫:github

  1. 在github上建立一個倉庫,記住ssh碼或者https地址
  2. 輸入如下,建立遠程鏈接,會有輸入帳號密碼
$ git remote add origin (ssh碼)/(hhtps)
  1. 將文件上傳到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,以後就不用加-ugit push origin master

這些命令裏面,origin其實就是遠程倉庫的名字,一般命名爲origin

  1. 從遠程倉庫克隆到本地

首先在github上找到一個倉庫再複製其ssh碼,在git bash上輸入命令行

git clone ssh碼

注意:在哪一個文件夾打開的git bash就克隆到哪一個文件夾下面。

10. 分支管理

1. 分支介紹

分支能夠實現相似於開發版系統,完成以後再推送到主幹,就是穩定系統。以下,兩個分支合併到主幹

learn-branches

在git中,master分支是主幹,一開始master指向這根主線,head指向master,因此head是充當一個指向當前點的指針,能夠指向主幹,也能夠指向分支。

git-br-initial

查看分支,顯示全部分支,當前分支前會有*

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

-- 文件衝突

git-br-feature1

出現這種狀況,兩個分支沒法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中,分支徹底能夠在本地本身藏着玩,是否推送,視你的心情而定!

-- 抓取分支

一般都會在masterdev分支分別推送各自的更改,當一我的把本身的分支都推送上去以後,另外一我的克隆下來的只能看到master分支,若是要在dev分支上開發,必須創建一個遠程分支到本地

git switch -c dev origin/dev

當另外一我的推送上了一個東西后,你也要推送,此時就會發生矛盾。另外一我的的最新提交和你試圖推送的提交有衝突。

此時會提示你進行git pull操做,可是會提示錯誤。

須要指定本地dev分支與遠程origin/dev分支的連接,設置devorigin/dev的連接

git branch --set-upstream-to=origin dev

再進行pull

git pull

這時候pull成功,會在衝突文件裏標註,須要手動解決

所以,多人協做的工做模式一般是這樣:

  1. 首先,能夠試圖用git push origin <branch>推送本身的修改;
  2. 若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;
  3. 若是合併有衝突,則解決衝突,並在本地提交;
  4. 沒有衝突或者解決掉衝突後,再用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教程

相關文章
相關標籤/搜索