中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一個很流行的版本控制系統Git學習筆記

發布時間:2020-06-05 11:20:15 來源:網絡 閱讀:1471 作者:2012hjtwyf 欄目:web開發



什么是Git  

Git是一種非常流行的分布式版本控制系統,它和其他版本控制系統的主要差別在于Git只關心文件數據的整體是否發生變化,而大多數版本其他系統只關心文件內容的具體差異,這類系統(CVS,Subversion,Perforce,Bazaar 等等)

每次記錄有哪些文件作了更新,以及都更新了哪些行的什么內容


Git另一個比較好的地方在于絕大多數操作都可以在本地執行,而每個本地都可以從服務器獲取一份完整的倉庫代碼

而且在沒網時仍然可以修改和使用大部分命令,在方便時再跟服務器進行同步,這樣可以更好的實現多人聯合編程


另外個人感覺Git系統的強大在于它創建了一個個類似于快照的東西

記憶我們每一次的提交并且可以在未來的任何時候回到這里,對于大型項目的管理非常有效


最原始的版本控制是純手工的版本控制:修改文件,保存文件副本。有時候偷懶省事,保存副本時命名比較隨意

時間長了就不知道哪個是新的,哪個是老的了,即使知道新舊,可能也不知道每個版本是什么內容

相對上一版作了什么修改了,當幾個版本過去后,很可能就是下面這個老土的樣子了:



一個很流行的版本控制系統Git學習筆記


Git特點

分布式相比于集中式的最大區別在于開發者可以提交到本地

每個開發者通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫


直接記錄快照,而非差異比較 : Git 更像是把變化的文件作快照后,記錄在一個微型的文件系統中

近乎所有操作都是本地執行 :在 Git 中的絕大多數操作都只需要訪問本地文件和資源,不用連網

時刻保持數據完整性 :在保存到 Git 之前,所有數據都要進行內容的校驗和(checksum)計算

                                        并將此結果作為數據的唯一標識和索引

多數操作僅添加數據 :常用的 Git 操作大多僅僅是把數據添加到數據庫


開發流程示意圖:

一個很流行的版本控制系統Git學習筆記


1、基本概念

Stage:暫存區,緩存區

Repository:倉庫(本地倉庫).git目錄

Remote:遠程倉庫

Track: 將一個新文件加入到git

Unstage:取消放入暫存區

 

Git存儲原理

Git 保存的不是文件差異或者變化量,而只是一系列文件快照。

快照管理:(微型文件系統,文件指紋驗證是否變化,不便的直接鏈接)

 一個很流行的版本控制系統Git學習筆記

三種區域

 一個很流行的版本控制系統Git學習筆記

所有數據存放在本地.git目錄,可以直接拷貝。

 

2、基本操作


2.1、倉庫創建

Git init


2.2、倉庫復制

Git clone  url

只會復制master下來

Git clone  url dir

指定文件夾

git clone https://github.com/libgit2/libgit2 mylibgit


2.3、文件管理

2.3.1、添加文件到暫存區

Git add *

Git add file

Git add dir       

 

2.3.2、刪除文件到暫存區

Git rm


2.3.3、修改文件名(移動)到暫存區

Git mv [file-orgin]  [file-rename]

 

2.3.4、提交暫存區到倉庫

Git commit –m “注釋”

 一個很流行的版本控制系統Git學習筆記

2.3.5、撤銷修改文件

修改的文件可以在git status觀察到

如果撤銷修改

可以采用git checkout -- file的方式撤銷

撤銷所有

git checkout  -- *


2.3.6        撤銷暫存區數據

一個很流行的版本控制系統Git學習筆記


2.4、分支管理

查看分支:git branch

創建分支:git branch <name>

 

切換分支:git checkout <name>

創建+切換分支:git checkout -b <name>

 

合并某分支到當前分支:git merge <name>

 

默認使用fast-forward模式

一個很流行的版本控制系統Git學習筆記

可以禁用,合并時會生成一個新的commit

git merge --no-ff -m "merge " dev

        

刪除分支:git branch -d <name>

 一個很流行的版本控制系統Git學習筆記

遠程分支下載:git checkout -b <本地分支名> origin/<遠程分支名>

              

 合并沖突:

 當merge出現沖突的時候,git會提醒

一個很流行的版本控制系統Git學習筆記

需要手動修改后進行提交

Git add

Git commit


2.5、版本管理

每個提交都是一個版本,git提供了一些方便的命令供我們使用。


2.5.1、查看日志

Git log

當前分支的commit歷史


有用的配置

log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

一個很流行的版本控制系統Git學習筆記

Git reflog

顯示引用變化歷史,相當于head變化

一個很流行的版本控制系統Git學習筆記


2.5.2、版本回退:

一個git reset --hard HEAD^

倆git reset --hard HEAD^^

多個git reset --hard HEAD~數字

 

回退到指定版本

git reset --hard commit_id

commitid可以從reflog或者log中查看

--hard表示丟棄暫存區的東西

 

--soft – 暫存區和工作目錄都不會被改變,改變都放在暫存區

--mixed – 默認選項。緩存區和你指定的提交同步,但工作目錄不受影響,改變不會放在暫存區。

--hard – 緩存區和工作目錄都同步到你指定的提交

 

Git revert

reset是指將當前head的內容重置,不會留任何痕跡。

revert是撤銷某一次提交,但是這次撤銷也會作為一次提交進行保存

 

假設當前有3個commit,git log如下:

commit3:  add test3.c 

commit2:  add test2.c 

commit1:  add test1.c 


執行 git revert HEAD~1之后,會提示提交信息,提交后git  log如下:

commit4:  Reverts “test2.c” 

commit3:  test3.c 

commit2:  test2.c 

commit1:  test1.c 


執行完后,test2.c被刪除了,運行git status,無任何變化。

執行 git reset HEAD~1之后,再次看git log,如下:

commit2:  test2.c 

commit1:  test1.c 


執行完后,commit3被刪除了

但是test3.c還在本地緩存區,運行git  status,可以看見提示test3.c可以用git add包含該文件。


若執行git reset --soft HEAD~1,log為:

commit2:  test2.c 

commit1:  test1.c 

執行完后,test3.c也被刪除了,查看git  status,提示可以commit以提交test3.c,test3.c在暫存區。

 

若執行git reset --hard HEAD~1,log為:

commit2:  test2.c 

commit1:  test1.c 

執行完后,test3.c也被刪除了,查看git  status,無任何變化。

 

2.6、標簽管理

                           

2.6.1、打標簽

相當于給某個提交取一個好記住的名字,例如v1.0.0

git tag v1.0.0 [commitid]

 

2.6.2、顯示所有標簽

git tag

 

2.6.3、顯示標簽信息

Git show tagname

 

2.6.4、標簽管理

命令git push origin <tagname>可以推送一個本地標簽;

命令git push origin --tags可以推送全部未推送過的本地標簽;

 

命令git tag -d <tagname>可以刪除一個本地標簽;

命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽。


2.7、遠程管理

一般都要和兩部分人提供


2.7.1、git clone

從遠程主機克隆一個版本庫

git clone <版本庫的網址> <本地目錄名>

 一個很流行的版本控制系統Git學習筆記


2.7.2、git remote

為了便于管理,Git要求每個遠程主機都必須指定一個主機名。git remote命令就用于管理主機名。


列出所有主機:git remote

帶網址列出主機:git remote –v

clone版本庫的時候,所使用的遠程主機自動被Git命名為origin

如果想用其他的主機名,需要用git clone命令的-o選項指定。

git clone -o jQuery https://github.com/jquery/jquery.git

 

git remote show命令加上主機名,可以查看該主機的詳細信息。

 git remote show <主機名>

git remote add命令用于添加遠程主機。

 git remote add <主機名> <網址>

git remote rm命令用于刪除遠程主機。

 git remote rm <主機名>

git remote rename命令用于遠程主機的改名。

 git remote rename <原主機名> <新主機名>

 

2.7.3、git fetch

將某個遠程主機的更新,全部取回本地。

如果只想取回特定分支的更新,可以指定分支名。

git fetch <遠程主機名> <分支名>


所取回的更新,在本地主機上要用"遠程主機名/分支名"的形式讀取

比如origin主機的master,就要用origin/master讀取。

git branch  –r,可以用來查看遠程分支,

-a選項查看所有分支。

 可以采用git checkout <遠程主機名>/ <分支名>切換到該分支

但是一般用git checkout -b newBrach <遠程主機名>/ <分支名>

意思是在<遠程主機名>/ <分支名>的基礎上,創建一個新分支。

也可以使用merge,合并遠程分支。


2.7.4、git pull

取回遠程主機某個分支的更新,再與本地的指定分支合并。

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

等同于先做git fetch,再做git merge


2.7.5、git push

命令用于將本地分支的更新,推送到遠程主機。

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

省略遠程分支名,表示將本地分支推送與之存在"追蹤關系"的遠程分支(通常兩者同名)

如果該遠程分支不存在,則會被新建。省略本地分支名,則表示刪除指定的遠程分支

如果當前分支與遠程分支之間存在追蹤關系,則本地分支和遠程分支都可以省略。

如果本地版本低,那么會報錯,可以--force強制push,--tags表示也推送tags.

git push --force origin

 

2.7.6、將本地庫推到遠程端

git push origin master

 

2.8、自定義Git


2.8.1、自定義命令

可以利用git config命令來給命令取別名。

例如

git config --global alias.co csheckout

git config --global alias.ci commit

git config --global alias.br branch

git config --global alias.unstage 'reset HEAD'


其中,global表示針對當前用戶所有倉庫都起作用

如果不加,表示只對當前倉庫有用,每個倉庫的Git配置文件都放在.git/config文件中:

當前用戶的config存放在用戶主目錄下的一個隱藏文件.gitconfig中:

 

2.8.2、忽略文件

 

為了防止沒用的文件被提醒untracked,可以在git倉庫主目錄下添加.gitignore文件

(本身要放到版本庫里面),該文件可以配置git要忽略哪些文件,不添加到倉庫中。

一個很流行的版本控制系統Git學習筆記

 

如果發現不能添加文件,可以采用

git check-ignore -v file檢查被哪個規則忽略了



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜良县| 南康市| 克东县| 谢通门县| 西平县| 建昌县| 楚雄市| 雷州市| 铁岭县| 台山市| 桃园市| 郧西县| 新化县| 简阳市| 高阳县| 仪征市| 阜阳市| 文成县| 逊克县| 辽宁省| 交口县| 静乐县| 伊吾县| 大理市| 焦作市| 祁门县| 三都| 盈江县| 宿州市| 廊坊市| 新丰县| 西青区| 汝阳县| 改则县| 东乡族自治县| 兴海县| 阿鲁科尔沁旗| 龙泉市| 长垣县| 泸水县| 蓝田县|