日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Git从入门到熟悉

發布時間:2024/3/13 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Git从入门到熟悉 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【原理】

1)Git介紹

2)Git和SVN的區別、SVN工作流程、架構圖講解

3)Git優點、架構圖、文件三種狀態、三個工作區域、工作流程講解


【實戰】

1)準備工作

2)創建版本庫

3)版本回退

4)工作區與暫存區的區別

5)刪除文件和恢復

6)遠程倉庫

7)遠程克隆到本地

8)GitHub刪除項目

9)分支的創建與合并

10)分支合并沖突解決

11)查看歷史合并功能

12)分支的注意事項

13)雙分支操作

14)強制刪除分支

15)多人協作

16)創建工作目錄的兩個方法

17)忽略需要push的文件

18)更新本地工作區

19)CentOS下搭建Git服務器

20)鉤子腳本


【拓展知識】

1)別名配置

2)標簽操作


【Git常用命令總結


前言:本人技術有限,如有說得不對或做的不對的地方,請大家提出來,謝謝大家


一、

Git介紹:

Git:是可以提供版本控制的一個工具

Github:提供了你用git這個工具的一個平臺,公共代碼倉庫

git服務器:自建倉庫,私有倉庫(企業用)


二、

Git和SVN的區別

Git是分布式版本控制系統,SVN是集中式版本控制系統


SVN的工作流程?

SVN有一臺中央服務器,下面有一臺至多臺的客戶端,完全依賴于中央服務器工作

SVN工作流程:

客戶端通過把內容Check out到本地,然后提交到中央服務器,后面再更新,然后再提交


弊端:1、如果中央服務器斷網了,則會導致無法更新

? ? 2、如果網絡不好,則會導致更新緩慢

? ? 3、如果中央服務器單點故障,又沒及時更新的話,則會導致數據丟失


架構圖:



三、

Git優點:

1、Git沒有中央管理器,每個人的電腦就是一臺完整的版本庫

2、工作不需要聯網,因為版本都在自已的電腦上

3、如果多個人共同協作,只需要push到github倉庫上即可進行多人協作

4、項目提交到GitHub,每一次提到到本地操作,都是一次對代碼倉庫的完整備份


架構圖:

上圖Git服務器是企業內部自已搭的私有的,如果是自已玩的,我們自已的電腦就是自已的倉庫,我們不需要聯網,然后有一個GitHub是公共倉庫,我們還可以把自已的項目提交到公共倉庫,相當于對自已代碼又做了一個備份,而企業內部,則需要自建一臺私有的Git服務器,大家通過先把代碼提交到自已電腦的倉庫,然后再提交到Git服務器這樣的一個工作流程



Git文件三種狀態

已提交(committed)

表示該文件已經被安全地保存在本地數據庫中了


已修改(modified)

表示修改了某文件,但還沒有提交保存


已暫存(staged)

表示把已修改的文件放在下次提交時要保存的清單中



Git文件流轉時的三個工作區域:

Git的工作目錄:

保存著特定的版本文件,屬于提交狀態


暫存區域:

做了修改并已放入暫存區域


本地倉庫:

顧名思義,本的版本倉庫


Git工作流程:

1、在工作目錄中修改某些文件

2、對修改后的文件進行快照,然后保存到暫存區域

3、提交更新,將保存在暫存區域的文件快照永久轉儲到Git目錄中


【實戰】

一、Git準備工作

1)cygwingit bash的對比

由于我們在Windows上執行git的命令需要一個仿Unix終端的軟件,在這里,我給大家介紹兩款軟件,一款是cygwin,一款是git bash,git bash是git提供給你用的軟件,那么這兩款軟件有啥不一樣呢,請看圖:

1、左邊那款是git bash,他能夠把你當前用戶家目錄所有文件包括windows的都列出來,而右邊的cygwin只列出他用戶家目錄的文件,并沒有列出windows的文件

總結第一點:cygwin簡潔性強,而bit bash把windows家目錄的東西都列出來,讓你也可以進行操作,至于你覺得哪個好,這個看你個人喜好


再來看第二張圖

2、左邊那款還是git bash,右邊那款則是cygwin,兩者都在f盤下執行了ls,看到兩者不什么不一樣了嗎,git bash能把文件夾以高這度藍色顯示,而cygwin不管你是什么文件都是白色,這個倒是讓我們不好區分

總結第二點:覺得這個高這度顯示各種不一樣的文件這個優越性git bash是做的比較好的


我的選擇:git bash


為什么 ?


因為git bash不緊可以高亮度顯示各種不一樣的文件,讓你可以快速操作,而且在家目錄下他也可以列出你的所有windows下的文件,提供給你操作,我覺得選擇git bash還是比選擇cygwin好的,不過這個最終還是看你自已個人選擇,我在這里只是說出我自已的想法而已


2)下載安裝

git下載鏈接:https://git-scm.com/download/win

我的安裝是默認一路向北


cygwin下載鏈接:https://cygwin.com/install.html

安裝教程:http://jingyan.baidu.com/article/6b97984d83dfe51ca2b0bf0e.html


3)桌面右健鼠標點擊Git Bash Here打開Git Bash,界面如下:

它是在Windows下模仿Shell命令行的一個終端


4)查看幫助

Administrator@YYBFVJDMAPF13NB?MINGW64?~/Desktop $?git?help?git?????????#git?help?<verb>Administrator@YYBFVJDMAPF13NB?MINGW64?~/Desktop $?git?config?--help????#git?<verb>?--help


5)設置身份

因為git是分布式版本控制系統,所以需要填寫用戶名和郵箱做為一個標識

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?config?--global?user.name?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?config?--global?user.email?t89191958201@139.com

注意:git config 下有三個參數,

--global: 表示對這臺機器上的所有Git倉庫都會使用這個配置

--system:用戶級別配置,針對某個用戶生效

--local:針對本地有效


6)設置比較工具(可選)

Administrator@YYBFVJDMAPF13NB?MINGW64?~/Desktop $??git?config?--global?merge.tool?vimdiff


7)檢查配置

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?config?--list core.symlinks=false core.autocrlf=true core.fscache=true color.diff=auto color.status=auto color.branch=auto color.interactive=true help.format=html http.sslcainfo=C:/Program?Files/Git/mingw64/ssl/certs/ca-bundle.crt diff.astextplain.textconv=astextplain rebase.autosquash=true merge.tool=vimdiff user.name=wsyht user.email=t89191958201@139.com core.repositoryformatversion=0 core.filemode=false core.bare=false core.logallrefupdates=true core.symlinks=false core.ignorecase=true


二、創建版本庫

1)(關健字:git init

版本庫:又名倉庫,你可以簡單的理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,包括修改、刪除、提交、回滾

Administrator@YYBFVJDMAPF13NB?MINGW64?~/Desktop $?cd?f:?Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?mkdir?demo1Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?cd?demo1/Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1 $?git?init Initialized?empty?Git?repository?in?F:/demo1/.git/Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $

這個時候會多了一個.git的隱藏目錄,他是用來管理跟蹤管理版本的,里面文件不可以修改


2)提交任務(關健字:git add,git commit)

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?pwd /f/demo1Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"test1"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?add?demo1.txt???#必須先add到暫存區,才能commit warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m?"demo1提交"???#-m后面是寫注釋,相當于SVN在提交前在窗口里寫注釋[master?(root-commit)?a7e593c]?demo1提交 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?files?changed,?1?insertions(+)create?mode?100644?demo1.txt


3)查看狀態(關健字:git status

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


4)修改裝態查看?(關健字:git status,modify

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"1111"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt????#修改裝態 no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a") Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master)


5)對比查看?(關健字:git diff

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?diff?demo1.txt diff?--git?a/demo1.txt?b/demo1.txt index?a5bce3f..979b2de?100644 ---?a/demo1.txt +++?b/demo1.txt @@?-1?+1,2?@@test1 +1111???????#可看出多了這一行 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $

注意:提交前須查看一下文件修改的內容,如不問題,再git add,然后git commit


6)查看提交歷史記錄(關健字:git log

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?log commit?8445579cbd259610f94a6c665fc841313a131516???#每次提交的版本號 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?23:15:40?2016?+0800文件增加2222一行???????????????????????????????#增加內容顯示的注釋,最近的一次提交,從上到下排序 commit?25e4895bd19c0833fa75d4b71ec8d621f3cbe2e7 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?23:15:08?2016?+0800增加1111一行 commit?a7e593c34a10f0b2e732153c09bce74381e7de35 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?22:56:25?2016?+0800demo1提交Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $

注意:剛才是我自已做實驗一共提交了三次,并未貼出來到博客而已,所以出現了三次提交的歷史記錄


7)省略部分信息 (關健字:--pretty=oneline

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?log?--pretty=oneline 8445579cbd259610f94a6c665fc841313a131516?文件增加2222一行 25e4895bd19c0833fa75d4b71ec8d621f3cbe2e7?增加1111一行 a7e593c34a10f0b2e732153c09bce74381e7de35?demo1提交 Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


三、版本回退

1)回退命令

? ?1、回退到上一個版本

????? git reset --hard HEAD^

? ?2、回退到上上一個版本

??????git reset --hard HEAD^^

? ?3、回退到前100個版本

???? ?git reset --hard HEAD~100

演示:

回退到上一個版本

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt test1 1111 2222Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?reset?--hard?HEAD^ HEAD?is?now?at?25e4895?增加1111一行Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt test1 1111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?log commit?25e4895bd19c0833fa75d4b71ec8d621f3cbe2e7 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?23:15:08?2016?+0800增加1111一行 commit?a7e593c34a10f0b2e732153c09bce74381e7de35 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?22:56:25?2016?+0800demo1提交Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


2)回退到剛才的最新版本

(1)首先獲取版本號 (關健字:git reflog

$?git?reflog 25e4895?HEAD@{0}:?reset:?moving?to?HEAD^ 8445579?HEAD@{1}:?commit:?文件增加2222一行????#這個是版本號8445579 25e4895?HEAD@{2}:?commit:?增加1111一行 a7e593c?HEAD@{3}:?commit?(initial):?demo1提交 Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


(2)恢復版本(關健字:git reset --hard 版本號

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?reset?--hard?8445579 HEAD?is?now?at?8445579?文件增加2222一行Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


(3)查看恢復

$?cat?demo1.txt test1 1111 2222Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?log commit?8445579cbd259610f94a6c665fc841313a131516 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?23:15:40?2016?+0800文件增加2222一行 commit?25e4895bd19c0833fa75d4b71ec8d621f3cbe2e7 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?23:15:08?2016?+0800增加1111一行 commit?a7e593c34a10f0b2e732153c09bce74381e7de35 Author:?wsyht?<t89191958201@139.com> Date:???Thu?Jul?28?22:56:25?2016?+0800demo1提交Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


四、工作區與暫存區的區別

工作區:就是在我創建的demo1的版本庫目錄里的文件,.git目錄除外

版本庫:.git目錄就是版本庫,版本庫存著很多東西,其中最重要的就是stage(暫存區),還有Git為我們自動創建了第一個分支Master,以及指向Master的第一個指針HEAD,


提交Git文件到版本庫有兩步;

第一步:是使有tgit add把文件添加進去,實際上就是把文件添加到暫存區

第二步:使用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支上


演示:

(1)修改文件和創建新文件查看

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"3333"?>>?demo1.txt?Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"1111"?>>?demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt Untracked?files:(use?"git?add?<file>..."?to?include?in?what?will?be?committed)demo2.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


(2)添加到暫存區查看

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?add?demo1.txt?demo2.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. warning:?LF?will?be?replaced?by?CRLF?in?demo2.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. On?branch?master Changes?to?be?committed:(use?"git?reset?HEAD?<file>..."?to?unstage)modified:???demo1.txtnew?file:???demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


(3)提交再查看

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m"4444"?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. [master?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 85ce2b6]?4444 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m"1111"?demo2.txt warning:?LF?will?be?replaced?by?CRLF?in?demo2.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. [master?fc33a37]?1111 warning:?LF?will?be?replaced?by?CRLF?in?demo2.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)create?mode?100644?demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


(4)一次性提交所有文件方法

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"5555"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"5555"?>>?demo2.txtc Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master)$?git?add?demo1.txt?demo2.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. warning:?LF?will?be?replaced?by?CRLF?in?demo2.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m?"一次性提交所有文件" [master?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. warning:?LF?will?be?replaced?by?CRLF?in?demo2.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 7ecdd08]?一次性提交所有文件 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. warning:?LF?will?be?replaced?by?CRLF?in?demo2.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.2?files?changed,?2?insertions(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


四、撤銷修改

如果在一行里面添加了新內容,現在要撤消

總結一下一共有三種方法:

第一種:把要刪除的內容添刪掉,然后add,commit

第二種:恢復上一個版本,git reset --hard HEAD^

第三種:如下 (關健字:git checkout -- 文件名)-- 很重要,請注意,這里說的是兩個'-',如果沒有 -- 的話;那么命令變成切換分支了 或者用 git checkout . 推薦使用這個,可以批量還原修改的文件,前提是未add和commit,但是不包括新增的文件,只是針對已經存在文件且修改了內容的文件,進行撤消

$?cat?demo1.txt test1 1111 2222 3333 5555 Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"6666"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?--?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt test1 1111 2222 3333 5555


如果,已經add添加到暫存區的,那么撤銷方法如下

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?echo?"666"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?cat?demo1.txt test1 1111 2222 3333 5555 666Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.

接著再如下圖操作,


如果新添加的文件,但是還沒有add,現在我們不想用這個新文件了,那么我們直接刪除就行了,如下:

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"111"?>>?wsyht.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master Untracked?files:(use?"git?add?<file>..."?to?include?in?what?will?be?committed)wsyht.txt nothing?added?to?commit?but?untracked?files?present?(use?"git?add"?to?track)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??oo.txt??wsyht.txt??ye.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?rm?-rf?wsyht.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $



五、刪除文件和恢復

(1)刪除演示

$?git?status On?branch?master nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??demo2.txt??test1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?rm?-rf?test1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master Changes?not?staged?for?commit:(use?"git?add/rm?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)deleted:????test1.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?add?test1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m?'delete?test1.txt' [master?43185ac]?delete?test1.txt1?file?changed,?1?deletion(-)delete?mode?100644?test1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


(2)恢復演示

$?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?rm?-rf?demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master Changes?not?staged?for?commit:(use?"git?add/rm?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)deleted:????demo2.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?--?demo2.txt Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?status On?branch?master nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


總結:

三種情況

1、未add想轍消(包括增刪改文件內容,也包括刪文件)

? ?git checkout -- 文件名??(轍消工作區的修改)? ? 或

? ?git checkout .

2、add到暫存區后,需分兩步操作

? ?第一步:git reset HEAD 文件名??(轍消暫存區的修改)

3、commit之后

? ?git reset --hard HEAD^ ? ? ?#版本回退1個版本

? ?git reset --hard HEAD^^ ? ? #版本回退2個版本 ??

? ?git reset --hard HEAD~100 ? ?#回退到前100個版本

???? ?git reflog ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#獲取版本號

? ? ??git reset --hard 版本號 ? ? ? ? ? ? ? ?#恢復版本號

? ? ?

六、遠程倉庫(GitHub公共倉庫)

1)先注冊github賬號

省略...


2)生成ssh-keygen密鑰對

Administrator@YYBFVJDMAPF13NB?MINGW64?~ $?cdAdministrator@YYBFVJDMAPF13NB?MINGW64?~ $?pwd /c/Users/AdministratorAdministrator@YYBFVJDMAPF13NB?MINGW64?~ $?ssh-keygen?-C?'wsyht'???#生成密鑰對,-C?就是把引號內容給id_rsa.pub公鑰做注釋 Generating?public/private?rsa?key?pair. Enter?file?in?which?to?save?the?key?(/c/Users/Administrator/.ssh/id_rsa): Created?directory?'/c/Users/Administrator/.ssh'. Enter?passphrase?(empty?for?no?passphrase): Enter?same?passphrase?again: Your?identification?has?been?saved?in?/c/Users/Administrator/.ssh/id_rsa. Your?public?key?has?been?saved?in?/c/Users/Administrator/.ssh/id_rsa.pub. The?key?fingerprint?is: SHA256:oDD45Fhl3zdLv6EwJivEAHTGRyiyxifnLfYv0mDE7m0?wsyht The?key's?randomart?p_w_picpath?is: +---[RSA?2048]----+ |o..o=.???????????| |.+o=?o?.?????????| |+.O?.?o?.?+??????| |.X?X?.?.?o?+?????| |o?X?=?.?S?.?o????| |???O?.?+?o?.?o???| |??+?B?.???.?.????| |???o?E???????????| |????o?o.?????????| +----[SHA256]-----+Administrator@YYBFVJDMAPF13NB?MINGW64?~ $


3、在GitHub上創建項目

4、創建展示


5、完成展示

在如上截圖顯示內容我要說一下了

通過本地倉庫和GitHub倉庫的連接方式有兩種:

第一種:通過HTTPS方式連接,就是如上紅框顯示,這種方式在本地遠程GitHub倉庫,需要用輸入你的GitHub賬號和密碼,而且每次都要輸入 ?缺點:不安全,麻煩

第二種:通過ssh方式連接,在本地創建密鑰對, 再把公鑰上傳到GitHub服務器,然后實現無密碼連接如下截圖這是通過ssh的連接方式: ? ? 優點:安全,方便


先說第一種連接方式:

這種方式是通過第一種https連接方式,先進入到我的工作目錄下,也就是創建的版本庫目錄下,

然后輸入遠程命令,用戶名和密碼即可


第二種方式展示

上面已經生成了密鑰對了,然后我們把id_rsa.pub的公鑰復制到GitHub上去


本地測試

修改配置文件,進到版本庫目錄.git下,修改config文件 Administrator@YYBFVJDMAPF13NB?MINGW64?~/.ssh $?cd?f:Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?cd?demo1/.git/Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/.git?(GIT_DIR!) $?ls COMMIT_EDITMSG??description??hooks/??info/??objects/???refs/ config??????????HEAD?????????index???logs/??ORIG_HEAD Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/.git?(GIT_DIR!)

$vim config

如上圖所示,原本默認是https的連接方式,現在改成通過ssh方式去連接,只需要把giuhub剛創建項目時他顯示的連接命令考到config文件url后面即可

測試連接:

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ssh?-T?git@github.com The?authenticity?of?host?'github.com?(192.30.253.113)'?can't?be?established. RSA?key?fingerprint?is?SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are?you?sure?you?want?to?continue?connecting?(yes/no)??yes Warning:?Permanently?added?'github.com,192.30.253.113'?(RSA)?to?the?list?of?known?hosts. Hi?wsyht!?You've?successfully?authenticated,?but?GitHub?does?not?provide?shell?access.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $

如圖所示,看到successfully表示成功了

現在我們再更改一個文件,然后再Push到github

先提交到本地

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"888"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m?'888' [master?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. d693375]?888 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)


現在我們push到github了

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?remote?add?origin?git@github.com:wsyht/demo_test.git fatal:?remote?origin?already?exists.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?push?-u?origin?master fatal:?remote?error:wsyht/demo/demo_test?is?not?a?valid?repository?nameEmail?support@github.com?for?help


如果報如上錯,解決辦法如下:

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?remote?rm?origin??#刪除遠程默認倉庫名"origin" #刪除遠程庫名后,則會把.git/config文件的url也刪除,所以到下面又要重新添加Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?remote?add?origin?git@github.com:wsyht/demo_test.git?#config文件重新添加urlAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?push?-u?origin?master???#第一次push需要加-u參數 Counting?objects:?3,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(2/2),?done. Writing?objects:?100%?(3/3),?281?bytes?|?0?bytes/s,?done. Total?3?(delta?0),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.git43185ac..07e6d4c??master?->?master Branch?master?set?up?to?track?remote?branch?master?from?origin.

成功了,哈哈哈。。。


.config文件展示

剛剛上面執行git remote rm origin就是把url那一行刪了

接著又執行了git remote add origin git@github.com:wsyht/demo_test.git

相當于重新加載了那一行,所以又能push上了,push即是推送文件上去github公共倉庫里

wsyht是我建注冊的github的用戶名,demo_test是我在GitHub上建的項目名,git是用戶名,github.com是github網站的域名,origin是遠程倉庫默認的庫名

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/.git?(GIT_DIR!) $?cat?config [core]repositoryformatversion?=?0filemode?=?falsebare?=?falselogallrefupdates?=?truesymlinks?=?falseignorecase?=?true [branch?"master"] [branch?"master"] [branch?"wsyht"] #[alias]#br?=?branch [remote?"origin"]url?=?git@github.com:wsyht/demo_test.gitfetch?=?+refs/heads/*:refs/remotes/origin/*


再查看github

OK,已經提交上去了


現在我們再來看一下config這個配置文件

Administrator@YYBFVJDMAPF13NB MINGW64 /f/demo1/.git (GIT_DIR!)

$ cat config

[core]

? ? ? ? repositoryformatversion = 0

? ? ? ? filemode = false

? ? ? ? bare = false

? ? ? ? logallrefupdates = true

? ? ? ? symlinks = false

? ? ? ? ignorecase = true

[branch "master"]

[remote "origin"]

? ? ? ? url = git@github.com:wsyht/demo_test.git ? #這一行是講你所用的連接方式

? ? ? ? fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]

? ? ? ? remote = origin ? ? ? ? ? ? ?

? ? ? ? merge = refs/heads/master ? ? #合并分支是master,到后面我再講什么是分支


注意:在第一次我們推送master分支時,加上了-u參數,git會本地的Master分支推送到github的master分支,并且會關聯起來,所以的就不需要再加入-u參數了


七、遠程庫克隆到本地

點擊進去


刪除提交后,現在我們在把GitHub克隆到本地,你會發現少了一個文件


本地操作:關健字: git clone

可以看到多了一個目錄出來


八、GitHub刪除項目


九、分支的創建與合并

首先我們來講一下什么是分支,分支就相當于我現在在做一個項目A,然后項目里面有一個功能的BUG我需要去做修改,然后為了安全,不影響我的Master分支,我就在我的Master分支上再創建一個分支出來,然后我就在我這個分支上修改我的代碼,修改完成后,再與我的Master主分支合并,這樣就不會影響到我的原文件,分支其實就是基于某一時刻的代碼進行修改,這個分支實際上只存儲這些修改,也可以說是項目某個時期的快照,但他不是真實賦值文件,修改完成后,合并到Master分支,這樣,Master分支的內容從而也會跟著發生改變,而創建的臨時文件,則怎么修改也不會影響我的源文件,即Master分支的內容,相當于你在虛擬機的一個測試環境,你愛昨玩昨玩,都不會影響到我的真實系統


1)創建分支wsyht 關健字:git checkout -b 分支名字 ,git branch

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?checkout?-b?wsyht?????????#創建并切換分支 Switched?to?a?new?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?git?branch????#查看當前所在分支master *?wsyht???Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $


git branch wsyht ? #創建分支

git checkout wsyht #切換分支


在wsyht分支上進行修改內容提交操作?

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?echo?"999"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht)$?git?commit?-m'wsyht999' [wsyht?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. c4ff9ea]?wsyht999 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?git?checkout?master Switched?to?branch?'master' Your?branch?is?up-to-date?with?'origin/master'.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?cat?demo1.txt test1 1111 2222 3333 5555 777 888 Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $

發現在wsyht分支上修改提交,再切換回master分支,并不影響master分支文件的內容


現在合并分支

把Master分支和wsyht分支內容合并在一起,只留Master分支,再看Master分支的內容,關健字:git merge wsyht

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?branch *?masterwsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?merge?wsyht Updating?3020d4c..c4ff9ea Fast-forwarddemo1.txt?|?1?+1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?cat?demo1.txt test1 1111 2222 3333 5555 777 888 999Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $??git?branch?-d?wsyht Deleted?branch?hb?(was?5939679).

可查看到,在wsyht分支上修改的內容,合并后,在Master分支上已顯示出來

注意:在創建的臨時分支上修改了文件內容后,此時主分區不能進行合并,一定要add,commit了然后再在主分區上進行合并操作,合并后,要刪除臨時分支,否則分支了多會凌亂,合并后可以通過git log -1查看最新合并的合并后無需再做任何操作,直接push到git服務器或GitHub即可


命令總結

查看分支:git branch

創建分支:git branch 分支名字

切換分支: git checkout 分支名字

創建切換分支: git checkout -b 分支名字

合并某分支到當前分支: git merge 分支名字

刪除分支: git branch -d 分支名字


十、分支合并沖突解決

$?git?branch *?masterAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?checkout?-b?hb Switched?to?a?new?branch?'hb'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(hb) $?cat?demo1.txt 111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(hb) $?echo?"333"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(hb) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(hb) $?git?commit?-m"hb3333" [hb?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. e224bca]?hb3333 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(hb) $?git?checkout?master Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?4?commits.(use?"git?push"?to?publish?your?local?commits)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?cat?demo1.txt 111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?echo?"222"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?commit?-m?'master?commit' [master?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. f60973f]?master?commit warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?merge?hb Auto-merging?demo1.txt CONFLICT?(content):?Merge?conflict?in?demo1.txt Automatic?merge?failed;?fix?conflicts?and?then?commit?the?result.?Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master|MERGING) $?cat?demo1.txt 111 <<<<<<<?HEAD 222???#master分支的內容 ======= 333???#hb分支的內容 >>>>>>>?hb???Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master|MERGING) $



#修改成主分支修改的內容,刪了hb分支的內容再提交就正常了

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master|MERGING) $?cat?demo1.txt 111 222Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master|MERGING) $?git?add?demo1.txt Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master|MERGING)$?git?commit?-m'new' [master?b2a4ccb]?new Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master)$?cat?demo1.txt 111 222


十一、查看歷史合并功能

在合并分支時,默認會用fast forware模式,這樣的話在我們刪除分支后,會刪掉我們曾經合并過的信息,此時,你再用git log就查看不了我們跟哪些分支做過合并了,所以在合并的時候我們要加上一個參數,--no-ff

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?checkout?-b?wsyht Switched?to?a?new?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?cat?demo1.txt 111 222Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?echo?"333"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. gAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht) $?git?commit?-m?"add?333" [wsyht?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 34d979f]?add?333 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+) Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(wsyht)$?git?checkout?master Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?7?commits.(use?"git?push"?to?publish?your?local?commits) Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master)$?git?merge?--no-ff?-m?'合并wsyht測試'?wsyht Merge?made?by?the?'recursive'?strategy.demo1.txt?|?1?+1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $?git?log?--graph?--pretty=oneline?--abbrev-commit????#--graph以圖形化顯示如下圖最左上角,--abbrev-commit則是縮短版本號簡短顯示 *???9e70f26?合并wsyht測試????#可以查看到wsyht的合并信息 |\ |?*?34d979f?add?333 |/ *???b2a4ccb?new |\ |?*?e224bca?hb3333 *?|?f60973f?master?commit |/ *?ce302ae?delete?oo.txt *?5939679?111 *?c831711?qk *?c4ff9ea?wsyht999 *?3020d4c?oo *?d497da7?Delete?demo2.txt *?d693375?888 *?07e6d4c?777 *?43185ac?delete?test1.txt *?7ecdd08?一次性提交所有文件 *?fc33a37?1111 *?85ce2b6?4444 *?8445579?文件增加2222一行 *?25e4895?增加1111一行 *?a7e593c?demo1提交Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/demo_test?(master) $


十一、分支的注意事項

第一個要注意的地方:如下可以看到git切換到wsyht分支,但是wsyht分支沒有add和commit,所以再切回master,他就相當于直接改了Master的文件,所以修改了一定要,add再commit后再切回Master

第二個要注意的地方:當你在其他分支上修改了文件提交后,合并到Master后,一定要刪了開出來的分支,然后再開新的分支用,畢免二次污染

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?-b?wsyht Switched?to?a?new?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?sed?-i?'1s/1111/wsyht/g'?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?status On?branch?wsyht Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?checkout?master M???????demo1.txt Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?1?commit.(use?"git?push"?to?publish?your?local?commits)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??demo2.txt cAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?commit?-m?'wsyht?commint' [master?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 3a59897]?wsyht?commint warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+),?1?deletion(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??demo2.txt cAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?wsyht Switched?to?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 888


十二、雙分支操作

我在這里講一句:實踐出真知,有時候想一些東西,還不如親自動手操作明白來得快,有些地方你想來想去不明白,但你動手操作了,你就明白他是怎么一回事了,所以不要光看不練,相信我,下面對于屬于開發比較復雜的項目的開發來說很重 ,請大家認真看


#這里是指使用第一個分支開發,但是還沒開發完新功能,所以并未能add提交,這個時候上頭又說要馬止改一個很重要的bug,要快速完成,所以我們在把這個分支儲藏起來,下次回來再拿出來繼續開發


第一步:

#第一個wsyht分支操作 ??

wsyht分支開發->儲藏-暫停

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch *?masterAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?-b?wsyht Switched?to?a?new?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?sed?-i?'1s/1111/wsyht/g'?demo1.txt Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?status On?branch?wsyht Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?stash????#儲藏當前修改狀態 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. Saved?working?directory?and?index?state?WIP?on?wsyht:?0631e15?wsyht?commit HEAD?is?now?at?0631e15?wsyht?commitAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?status?????#再次查看狀態發現什么都沒有 On?branch?wsyht nothing?to?commit,?working?tree?clean


第二步:

第二個bug分支操作

bug分支修改->提交-合并-刪除bug分支

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?checkout?master Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?3?commits.(use?"git?push"?to?publish?your?local?commits)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?-b?bug Switched?to?a?new?branch?'bug'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?git?status On?branch?bug nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?sed?-i?'s/888/bbb/g'?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?git?status On?branch?bug Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?git?commit?-m'commit?bug' [bug?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. ed1eded]?commit?bug warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+),?1?deletion(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(bug) $?git?checkout?master Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?3?commits.(use?"git?push"?to?publish?your?local?commits)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?merge?--no-ff?-m?'merged?bug'?bug Merge?made?by?the?'recursive'?strategy.demo1.txt?|?2?+-1?file?changed,?1?insertion(+),?1?deletion(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch?-d?bug Deleted?branch?bug?(was?ed1eded).Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??demo2.txt c Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 bbb


第三步:

#回到第一個分支wsyht操作

合并master分支->調回wsyht修改狀態->add提交

合并master分支主要就是先把剛剛修改的bug先合并了,然后再調回剛才修改的狀態,繼續開發提交

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?wsyht Switched?to?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txt c Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 888Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?status On?branch?wsyht nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?merge?master Updating?0631e15..cd961d2 Fast-forwarddemo1.txt?|?2?+-1?file?changed,?1?insertion(+),?1?deletion(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?stash?pop????????#恢復原來修改的狀態 Auto-merging?demo1.txt On?branch?wsyht Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???demo1.txt no?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a") Dropped?refs/stash@{0}?(d1ba7adfb82639ae0ecf1f946349dc064fb30617) Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?add?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?status On?branch?wsyht Changes?to?be?committed:(use?"git?reset?HEAD?<file>..."?to?unstage)modified:???demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?commit?-m'commit?wsyht' [wsyht?9d505e6]?commit?wsyht1?file?changed,?1?insertion(+),?1?deletion(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?status On?branch?wsyht nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?log?--graph?--pretty=oneline?--abbrev-commit *?9d505e6?commit?wsyht *???cd961d2?merged?bug |\ |?*?ed1eded?commit?bug |/ *?0631e15?wsyht?commit *?3a59897?wsyht?commint *?c1e71b1?test *?d693375?888 *?07e6d4c?777 *?43185ac?delete?test1.txt *?7ecdd08?一次性提交所有文件 *?fc33a37?1111 *?85ce2b6?4444 *?8445579?文件增加2222一行 *?25e4895?增加1111一行 *?a7e593c?demo1提交 Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 bbb


第四步

#主分支Master操作

切回主分支->合并wsyht分支->add提交->刪除wsyht分支

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?checkout?master Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?5?commits.(use?"git?push"?to?publish?your?local?commits)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt 1111 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?merge?wsyht Updating?cd961d2..9d505e6 Fast-forwarddemo1.txt?|?2?+-1?file?changed,?1?insertion(+),?1?deletion(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch?-d?wsyht Deleted?branch?wsyht?(was?9d505e6).

雙分支操作總結:主分支、第一分支、第二分支

第一步:第一分支開發修改、然后儲藏狀態

第二步:從第一分支切回Master分支,再創建并切去第二分支,開發修改,提交,并合并到Master分支,刪除第一分支

第三步:從Master分支切到第二分支,并在第二分支合并Master分支,恢復第二分支修改狀態,繼續修第四步:從第二分支再切回Master分支,并合并第二分支修改的內容,刪除第二分支

分支命令總結

查看分支合并情況

git log --graph --pretty=oneline --abbrev-commit ? #--graph圖形化顯示,--pretty=oneline簡短顯示,--abbrev-commit驗證碼省略顯示

git stash????#儲藏內容

git stash list ? #查看儲藏內容

git stash pop/git stash apply ? ?#恢復上一個工作內容

二者不同的是git stash apply恢復后,stash內容并未刪除,你需要用git stash drop來刪除,而用git stash pop,恢復的同時把stash內容也刪了


十四、強制刪除分支


當我們在某第二個分支開發某一個功能,提交分支之后,回頭策劃卻說還是不要改了,這個時候我們不能合并分支,只能刪除第二個分支

如下:

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch *?masterAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?checkout?-b?wsyht Switched?to?a?new?branch?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?rm?-rf?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo2.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?add?demo1.txt Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?commit?-m'delete?demo1' [wsyht?c83d5a1]?delete?demo11?file?changed,?7?deletions(-)delete?mode?100644?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?checkout?master Switched?to?branch?'master' Your?branch?is?ahead?of?'origin/master'?by?6?commits.(use?"git?push"?to?publish?your?local?commits) Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master)$?git?branch?-d?wsyht??? error:?The?branch?'wsyht'?is?not?fully?merged. If?you?are?sure?you?want?to?delete?it,?run?'git?branch?-D?wsyht'.???#這里說還沒有合不能用-d刪除,只能用大D強制刪除Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch?-D?wsyht???#用大D強制刪除 Deleted?branch?wsyht?(was?c83d5a1).Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch *?master Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $


十五、多人協作

當在你提交或幫隆的時候會自動幫你把本地和遠程的master分支對應起來,遠程庫的默認名稱是origin


#查看遠程庫

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?remote???#查看遠程庫的信息 originAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?remote?-v????#查看遠程庫的詳信息 origin??git@github.com:wsyht/demo_test.git?(fetch) origin??git@github.com:wsyht/demo_test.git?(push)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $

上面顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址


#推送分支

推送分支就是把本地的分支提交到對應的遠程庫的分支中,如果是Master分支就提交到遠程庫的Master分支,如果是其它分支如wsyht,就提交到遠程庫的wsyht分支中與之相對應,如果一些bug分支不需要提交的,就把他先主分支先合并了,然后再提交到遠程庫中

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt wsyht 1111 2222 3333 5555 777 bbbAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?echo?"test"?>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?cat?demo1.txt testAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master)$?git?commit?-m?'test?commit'?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. [master?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 5e368ff]?test?commit warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+),?7?deletions(-)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?pull remote:?Counting?objects:?5,?done. remote:?Compressing?objects:?100%?(3/3),?done. remote:?Total?5?(delta?0),?reused?3?(delta?0),?pack-reused?0 Unpacking?objects:?100%?(5/5),?done. From?github.com:wsyht/demo_testd693375..3020d4c??master?????->?origin/master Removing?demo2.txt Merge?made?by?the?'recursive'?strategy.demo2.txt?|?2?--oo.txt????|?1?+2?files?changed,?1?insertion(+),?2?deletions(-)delete?mode?100644?demo2.txtcreate?mode?100644?oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?ls demo1.txt??oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?push?-u?origin?master?????#成功了 Counting?objects:?19,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(14/14),?done. Writing?objects:?100%?(19/19),?1.70?KiB?|?0?bytes/s,?done. Total?19?(delta?2),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.git3020d4c..6bbbcdf??master?->?master Branch?master?set?up?to?track?remote?branch?master?from?origin.

#這里再強調一次,是當第一次push你才需要-u,到后面就不需要再加-u參數了


查看GitHub成功同步上去了

2)多人同推沖突

現在假如有兩個人兩臺電腦共同推一個分支的文件,假如我先推了,張三也又接著推了,張三就會報錯推不上去,這個時候,我們來看看怎么操作


角色:我”“張三”


首先我的在我的電腦上創建一個wsyht分支用來做開發,因為master分支張三是無法拉取下來做開發的,所以只能搞一個wsyht分支,在wsyht分支上做開發,開發完成功能后,提交wsyht分支,然后push到git服務器,再合并master分支,然后把master分支提交,push到git服務器


的電腦操作,如下:

流程:創建分支->切換分支->推送 ? #此分支一般工作中事先存在,而我這里為了做事驗,所以臨時創建

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch *?masterAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch?wsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?branch *?masterwsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(master) $?git?push?origin?wsyht Everything?up-to-date


張三電腦操作

操作過程:取遠程庫的分支到本地->創遠程分支到本地->修改提交->push

Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?mkdir?demo2Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?cd?demo2Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2 $?git?init Initialized?empty?Git?repository?in?F:/demo2/.git/Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(master) $?git?remote?add?origin?git@github.com:wsyht/demo_test.gitAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(master) $?git?fetch?origin???#取遠程庫的分支到本地,(如果只想取某個分支,git?fetch?origin?分支名) remote:?Counting?objects:?58,?done. remote:?Compressing?objects:?100%?(36/36),?done. remote:?Total?58?(delta?3),?reused?56?(delta?3),?pack-reused?0 Unpacking?objects:?100%?(58/58),?done. From?github.com:wsyht/demo_test*?[new?branch]??????master?????->?origin/master*?[new?branch]??????wsyht??????->?origin/wsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(master) $?lsAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(master) $?git?branch?wsyht?origin/wsyht????#創建遠程庫的分支到本地 Branch?wsyht?set?up?to?track?remote?branch?wsyht?from?origin.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(master) $?lsAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(master) $?git?checkout?wsyht??#切換到創建的分支 Switched?to?branch?'wsyht' Your?branch?is?up-to-date?with?'origin/wsyht'. l Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?ls???#可查看到該分支的文件了 demo1.txt??oo.txt$?cat?demo1.txt test 222 333Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?echo?"111"?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?cat?demo1.txt test 222 333 111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?commit?-m?'zhangsan?add?111?demo1' [wsyht?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. e4ace0b]?zhangsan?add?111?demo1 warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?push?origin?wsyht Counting?objects:?3,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(2/2),?done. Writing?objects:?100%?(3/3),?290?bytes?|?0?bytes/s,?done. Total?3?(delta?0),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.git924fcc5..e4ace0b??wsyht?->?wsyht


的電腦操作

操作過程:切換分支->修改文件->提交->push->解決沖突->再push

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?pwd /f/demo1Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?checkout?wsyht Already?on?'wsyht'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt test 222 333Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?echo?'111'?>>?demo1.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?add?demo1.txt warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?commit?-m'wo?add?111?demo' [wsyht?warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 805dcba]?wo?add?111?demo warning:?LF?will?be?replaced?by?CRLF?in?demo1.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?push?origin?wsyht???#這里push失敗是因為沖突了,提示叫你git?pull To?git@github.com:wsyht/demo_test.git!?[rejected]????????wsyht?->?wsyht?(fetch?first) error:?failed?to?push?some?refs?to?'git@github.com:wsyht/demo_test.git' hint:?Updates?were?rejected?because?the?remote?contains?work?that?you?do hint:?not?have?locally.?This?is?usually?caused?by?another?repository?pushing hint:?to?the?same?ref.?You?may?want?to?first?integrate?the?remote?changes hint:?(e.g.,?'git?pull?...')?before?pushing?again. hint:?See?the?'Note?about?fast-forwards'?in?'git?push?--help'?for?details.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?pull???#這里git?pull又提示進行下面的一步操作 remote:?Counting?objects:?3,?done. remote:?Compressing?objects:?100%?(2/2),?done. remote:?Total?3?(delta?0),?reused?3?(delta?0),?pack-reused?0 Unpacking?objects:?100%?(3/3),?done. From?github.com:wsyht/demo_test924fcc5..e4ace0b??wsyht??????->?origin/wsyht There?is?no?tracking?information?for?the?current?branch. Please?specify?which?branch?you?want?to?merge?with. See?git-pull(1)?for?details.git?pull?<remote>?<branch>If?you?wish?to?set?tracking?information?for?this?branch?you?can?do?so?with:git?branch?--set-upstream-to=origin/<branch>?wsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?branch?--set-upstream-to=origin/wsyht Branch?wsyht?set?up?to?track?remote?branch?wsyht?from?origin.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?pull???#執行完上面那一步,終于可以pull了,輸出的提示合并也沒有問題,如果合并有問題,就修改剛剛修改的文件,然后再push Merge?made?by?the?'recursive'?strategy.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?pull?? Already?up-to-date.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?demo1.txt test 222 333 111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?push?origin?wsyht???#好push成功 Counting?objects:?2,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(2/2),?done. Writing?objects:?100%?(2/2),?338?bytes?|?0?bytes/s,?done. Total?2?(delta?1),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.gite4ace0b..ca2b12a??wsyht?->?wsyht


現在我們看看GitHub上有沒有push成功了




多人協作沖突解決總結:1、如果我push報錯,則是別人先push了

???????????????????? ?2、這個時候我就提示git pull,或進行下一步操作

???????????????????? ?3、如果git pull的時候合并有問題,就要修改文件,解決沖突

????????????????????? 4、再次push就成功了



十六、創建工作目錄的兩個方法

第一種、就是上面張三用的方:,git init后,然后使用取得遠程庫的分支,創建遠程庫的分支

現在我們來演示第二種方法:git clone

當來了一位新員工,我們就給克隆git的項目下來給他開發推送

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3 $?git?clone?git@github.com:wsyht/demo_test.git Cloning?into?'demo_test'... remote:?Counting?objects:?73,?done. remote:?Compressing?objects:?100%?(45/45),?done. remote:?Total?73?(delta?5),?reused?71?(delta?5),?pack-reused?0 Receiving?objects:?100%?(73/73),?6.22?KiB?|?0?bytes/s,?done. Resolving?deltas:?100%?(5/5),?done. Checking?connectivity...?done.?Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3 $?ls demo_test/ cd Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3 $?cd?demo_test/Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?ls demo1.txt??oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?cat?oo.txt 111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?echo?"222"?>>oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?git?status On?branch?master Your?branch?is?up-to-date?with?'origin/master'. Changes?not?staged?for?commit:(use?"git?add?<file>..."?to?update?what?will?be?committed)(use?"git?checkout?--?<file>..."?to?discard?changes?in?working?directory)modified:???oo.txtno?changes?added?to?commit?(use?"git?add"?and/or?"git?commit?-a")Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?git?add?oo.txt warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?git?status warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. On?branch?master Your?branch?is?up-to-date?with?'origin/master'. Changes?to?be?committed:(use?"git?reset?HEAD?<file>..."?to?unstage)modified:???oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?git?commit?-m'yes' [master?warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 3538a0c]?yes warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?ls demo1.txt??oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?cat?oo.txt 111 222Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo3/demo_test?(master) $?git?push?origin?master???#沒有問題,推送成功 Counting?objects:?3,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(2/2),?done. Writing?objects:?100%?(3/3),?265?bytes?|?0?bytes/s,?done. Total?3?(delta?0),?reused?1?(delta?0) To?git@github.com:wsyht/demo_test.git55c5d89..3538a0c??master?->?master


十七、忽略需要push的文件

忽略push的文件很簡單,只需要在你的工作區目錄下創建一個特珠的.gitignore文件,然后把忽略的文件名或文件尾輟填進去即可,但在windows下你是創建不了.xxx的文件,他會提示你輸入文件名,這個時候你可以用編輯器另存為就可以創建出這個文件

如:

#python *.so *.egg


如果你添加的某個文件被忽略了,但你又想添加,

有兩種方法解決:第一:修改.gitignore文件

????????????????第二:就是強制執行他


第一種方法:查看要添加的那個文件在.gitignore的哪一行設置了忽略,然后去修改.gitignore文件

git?check-ignore?-v?xx.xx??#xx.xx是被忽略的那個文件


第二種方法:加上-f 強制添加執行

git?add?-f?xx.xx


GitHub也為我們準備了各種配置文件,大家可以參考一下

https://github.com/github/gitignore



十八、更新本地工作區

張三操作: ?#demo2是張三的工作區目錄

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?echo?"333"?>>?oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?add?oo.txt warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?commit?-m'333' [wsyht?warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. af8dc1c]?333 warning:?LF?will?be?replaced?by?CRLF?in?oo.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?push?origin?wsyht Counting?objects:?3,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(2/2),?done. Writing?objects:?100%?(3/3),?269?bytes?|?0?bytes/s,?done. Total?3?(delta?0),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.gitc3f4ac0..af8dc1c??wsyht?->?wsyht


我的操作: 關健字:?git pull #更新本地工作區

記得修改文件之前先git pull一下,再修改和push

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?cd?../demo1Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?ls demo1.txt??oo.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?pull remote:?Counting?objects:?3,?done. remote:?Compressing?objects:?100%?(2/2),?done. remote:?Total?3?(delta?0),?reused?3?(delta?0),?pack-reused?0 Unpacking?objects:?100%?(3/3),?done. From?github.com:wsyht/demo_testc3f4ac0..af8dc1c??wsyht??????->?origin/wsyht Updating?c3f4ac0..af8dc1c Fast-forwardoo.txt?|?1?+1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cat?oo.txt??#查看已經看到333了 111 222 333


十九、CentOS下搭建Git服務器

#服務器端部署

[root@localhost?local]#?ifconfig?|grep??"inet?addr:"?|?grep?Bcast?|?awk?-F":"?'{print?$2}'?|?awk?-F'?'?'{print?$1}' 192.168.1.102 [root@localhost?~]#?yum?-y?install?git [root@localhost?~]#?useradd??git??#添加的git一定要能登陸,否則你clone和push都會報錯,所以不能加-s參數 [root@localhost?~]#?git?init?--bare?/usr/local/wsyht.git [root@localhost?~]#?ls?/usr/local/wsyht.git/ branches??description??hooks??objects config????HEAD?????????info???refs [root@localhost?~]#?chown?-R?git:git?/usr/local/wsyht.git?#這里一定要加-R,否則本地push會報沒有權限 [root@localhost?~]#?cd?/home/git/ [root@localhost?git]#?mkdir?-m?700?.ssh??#一定要給700權限,否則密鑰對不上 [root@localhost?git]#?chown?git:?.ssh????#記住所有者和所屬組一定要給git用戶,否則會連不上,提示你輸入密碼,所以權限方面要注意兩個方面,第一個就是所有者所屬組,第二個就是他的讀寫執行權限 [root@localhost?git]#?cd?.ssh [root@localhost?.ssh]#?echo?"ssh-rsa?AAAAB3NzaC1yc2EAAAADAQABAAABAQC6y9vxDIo9rqCAW7xebYpFFIL5M0wvwfe/qbcehE5VRvcVvKnlH/TsEygxGJEMCgjfLW7sKo5Me3W5KJNfNFeWQcn6AMSm08ZQk9qCbP1DpyW+AWvnz2KORYzM0+yLSbjd8py6XpWaMO1zX4TFm6VH3IRfaIpe0G/DhIzMxfNnNdCcXw6ou1Bb6tI41Q78ovGZGyPum4Nt03vLQpe0d6p5bqk21h1VeDbnH2mKa5GbS+OLgK+1qMvUy5+q8deASn18gepxhNtk+7LqNWlhTN8hQBFHOsqMuLvb5IGqBTRy/HfEFPiEkmgy9YrSWHiaPqJ/rCIYufaIKEgyAlISIqPj?wsyht"?>>?authorized_keys

解釋:上述的--bare意思是只會創建一個裸倉庫,而沒有工作區,因為服務器上的Git倉庫純碎是為了共享,所以不讓用戶直接到服務器上去改工作區,并且服務器上的倉庫通常以.git結尾,所以我上面起了一個wsyht.git的倉庫名字,再把倉庫的權限改好,把公鑰的Key配上去,生成key的使用方式前面已講了,這里就不再闡述,到下面我們就可以在客戶端上進行clone,push等之類的操作


#本地操作

連接方式是 git clone git@server ip:/倉庫路徑/倉庫目錄名字

Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?mkdir?demo2Administrator@YYBFVJDMAPF13NB?MINGW64?/f $?cd?demo2Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2 $?git?clone?git@192.168.1.102:/usr/local/wsyht.git Cloning?into?'wsyht'... remote:?Counting?objects:?11,?done. remote:?Compressing?objects:?100%?(4/4),?done. remote:?Total?11?(delta?0),?reused?0?(delta?0) Receiving?objects:?100%?(11/11),?done. Checking?connectivity...?done.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2/wsyht?(master) $?git?remote?-v origin??git@192.168.1.102:/usr/local/wsyht.git?(fetch) origin??git@192.168.1.102:/usr/local/wsyht.git?(push)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2 $?ls wsyht/ c Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2 $?cd?wsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2/wsyht?(master) $?lsAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2/wsyht?(master) $?echo?"111"?>?test.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2/wsyht?(master) $?git?add?test.txt warning:?LF?will?be?replaced?by?CRLF?in?test.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2/wsyht?(master) $?git?commit?-m'com?test.txt' [master?7108256]?com?test.txt warning:?LF?will?be?replaced?by?CRLF?in?test.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)create?mode?100644?test.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2/wsyht?(master) $?git?push?origin?master Counting?objects:?3,?done. Writing?objects:?100%?(3/3),?238?bytes?|?0?bytes/s,?done. Total?3?(delta?0),?reused?2?(delta?0) To?git@192.168.1.102:/usr/local/wsyht.git65c1f60..7108256??master?->?master

OK,可以看到clone和push都沒有問題一切正常,其他命令操作方式跟遠程倉庫一樣,唯一不一樣的就是連接的clone后面的那一串域名不同


注意:我在本地push文件到Git服務器后,因為創建的這個是裸倉庫是沒有工作區的,所以他的存文件的方式是不一樣的,貌似是以什么進制方式存著,所以你在Git服務器里是找不到他的文件的,這個很正常,他是占用服務器的磁盤空間的


這個是Git服務器存取分支目錄:

/usr/local/wsyht.git/refs/heads/

當我在本地創建了新分支的時候,則所有分支文件會在上面目錄下顯示出來

如下我又創建了一個wsyht分支,則在服務器上又顯示一個wsyht的普通文件

[root@localhost?heads]#?pwd /usr/local/wsyht.git/refs/heads [root@localhost?heads]#?ll 總用量?8 -rw-rw-r--?1?git?git?41?7月??31?21:12?master -rw-rw-r--?1?git?git?41?7月??31?21:20?wsyht


而這個目錄是存儲標簽內容,這里我就不再一一演示了

[root@localhost tags]# pwd

/usr/local/wsyht.git/refs/tags


報錯展示:

1)因為git服務器里的git用戶禁止登陸了,本地clone不上所以報的錯

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/KuGou $?git?clone?git@192.168.1.102:/usr/local/wsyht.git Cloning?into?'wsyht'... fatal:?protocol?error:?bad?line?length?character:?This

解決方法:讓git可以登陸,但不用設密碼,因為人我們是用key去連的,這樣才安全


2)因為git權限不夠報的錯

?Administrator@YYBFVJDMAPF13NB?MINGW64?/f/KuGou yht?(master) $?git?push?origin?master Counting?objects:?3,?done. Writing?objects:?100%?(3/3),?203?bytes?|?0?bytes/s,?done. Total?3?(delta?0),?reused?0?(delta?0) error:?insufficient?permission?for?adding?an?object?to?repository?database?./objects fatal:?failed?to?write?object error:?unpack?failed:?unpack-objects?abnormal?exit To?git@192.168.1.102:/usr/local yht.git!?[remote?rejected]?master?->?master?(n/a?(unpacker?error)) error:?failed?to?push?some?refs?to?'git@192.168.1.102:/usr/local yht.git'

解決方法:在Git服務器上把Git倉庫的整個目錄和文件子目錄子文件的所有者和所屬組都給Git即可



二十、鉤子腳本

SVN常用腳本:pre-commitpost-commit

Git常用腳本:post-receive


SVN和Git的pre-commit說明

這是提交要執行的動作,沒什么好說的,不一樣的是Git是在本地執行動作


SVN和Git的post-commit說明

這是提交后要執行的操作,也沒什么好說的,同理,不一樣的是,Git他提交后執行的動作是在本地執行的,因為他提交的內容是提交到本地倉庫,他本地就是一個倉庫


Git的 post-receive ? => 重點內容到了

Git的post-receive是當接到你在本地push內容到我的Git服務器后,觸發了我Git服務器的post-receive腳本去執行相應的動作,而這個要腳本里面要執行的這個動作就由你自已去定義


現在我們來演示一下

Git服務器作:

一定要先把文件復制出來,把后面的.sample去掉才能使用

從上圖可以看到,復制出來的post-receive權限不對,我們要先改權限


[root@bogon?hooks]#?ll 總用量?48 -rwxr-xr-x?1?git?git??452?7月??31?12:45?applypatch-msg.sample -rwxr-xr-x?1?git?git??896?7月??31?12:45?commit-msg.sample -rwxr-xr-x?1?git?git??160?7月??31?12:45?post-commit.sample -rwxr-xr-x?1?git?git??548?8月???2?00:26?post-receive -rwxr-xr-x?1?git?git??548?7月??31?12:45?post-receive.sample -rwxr-xr-x?1?git?git??189?7月??31?12:45?post-update.sample -rwxr-xr-x?1?git?git??398?7月??31?12:45?pre-applypatch.sample -rwxr-xr-x?1?git?git?1578?7月??31?12:45?pre-commit.sample -rwxr-xr-x?1?git?git?1239?7月??31?12:45?prepare-commit-msg.sample -rwxr-xr-x?1?git?git?4951?7月??31?12:45?pre-rebase.sample -rwxr-xr-x?1?git?git?3611?7月??31?12:45?update.sample


添加腳本要執行的內容

[root@bogon?hooks]#?echo?"/bin/touch?/tmp/test_wsyht.txt"?>>?post-receive??? [root@bogon?hooks]#?cat?post-receive #!/bin/sh # #?An?example?hook?script?for?the?"post-receive"?event. # #?The?"post-receive"?script?is?run?after?receive-pack?has?accepted?a?pack #?and?the?repository?has?been?updated.??It?is?passed?arguments?in?through #?stdin?in?the?form #??<oldrev>?<newrev>?<refname> #?For?example: #??aa453216d1b3e49e7f6f98441fa56946ddcd6a20?68f7abf4e6f922807889f52bc043ecd31b79f814?refs/heads/master # #?see?contrib/hooks/?for?a?sample,?or?uncomment?the?next?line?and #?rename?the?file?to?"post-receive". #.?/usr/share/git-core/contrib/hooks/post-receive-email /bin/touch?/tmp/test_wsyht.txt

因為/tmp目錄下是所有用戶都有讀、寫、執行的,如果要對其他目錄有讀寫執行權限,必須得先把所有者所屬組改成Git,然后再給他相應的讀、寫、執行權限即可,


再查看一下/tmp目錄下的內容,目前沒有test_wsyht.txt文件

[root@bogon?hooks]#?ls?/tmp/ keyring-R8s7ni??pulse-gbg3wjQuvzvI??virtual-root.cNwkfe??vmware-config0 orbit-gdm???????pulse-zqLc6oaaNKa9??virtual-root.D0hQX0??VMwareDnD orbit-root??????ssh-hotQgm2726??????virtual-root.KIVXJC??vmware-root

好,到這一步,我們的Git服務器就算配置完了


本地操作:

提交和push

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/test/wsyht?(master) $?echo?"test?commit"?>>?wsyht.txtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/test/wsyht?(master) $?git?add?wsyht.txt warning:?LF?will?be?replaced?by?CRLF?in?wsyht.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.Administrator@YYBFVJDMAPF13NB?MINGW64?/f/test/wsyht?(master) $?git?commit?-m'commit?test' [master?warning:?LF?will?be?replaced?by?CRLF?in?wsyht.txt. The?file?will?have?its?original?line?endings?in?your?working?directory. 673c27a]?commit?test warning:?LF?will?be?replaced?by?CRLF?in?wsyht.txt. The?file?will?have?its?original?line?endings?in?your?working?directory.1?file?changed,?1?insertion(+)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/test/wsyht?(master) $?git?push?origin?master Counting?objects:?3,?done. Delta?compression?using?up?to?4?threads. Compressing?objects:?100%?(3/3),?done. Writing?objects:?100%?(3/3),?289?bytes?|?0?bytes/s,?done. Total?3?(delta?1),?reused?0?(delta?0) To?git@192.168.1.113:/usr/local/wsyht.gitf979810..673c27a??master?->?master


查看Git服務器



【拓展知識】

一、別名配置

法1:真接命令行配置

輸入--global是對當前用戶起作用的,如果不加只對當前倉庫起作用

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?config?--global?alias.st?status???#把status?配置成別名?stAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?config?--global?alias.co?checkout?#把checkout?配置成別名?coAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?config?--global?alias.ci?commit???#把commit?配置成別名?ciAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?config?--global?alias.br?branch???#把branch?配置成別名?brAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?config?--global?alias.unstage?'reset?HEAD'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?config?--global?alias.last?'log?-1'Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?status???#用原來的命令查看狀態 On?branch?wsyht Your?branch?is?up-to-date?with?'origin/wsyht'. nothing?to?commit,?working?tree?cleanAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo2?(wsyht) $?git?st???????#用別名查看狀態,成功了,其他別名同樣使用方法,這里不再一一演示 On?branch?wsyht Your?branch?is?up-to-date?with?'origin/wsyht'. nothing?to?commit,?working?tree?clean


法2:配置文件配置

我們可以改兩個配置文件

首先先說第一個配置文件,我們在命令行輸入命令--global設置別名,也是把命令寫進這個文件的,我們也可以進到這個文件修改,他就是你家目錄下的.gitconfig,敲cd回車就可以回到你的家目錄

第一個配置文件配置

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?pwd /f/demo1Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?cdAdministrator@YYBFVJDMAPF13NB?MINGW64?~ $?ls?-a?.gitconfig .gitconfigAdministrator@YYBFVJDMAPF13NB?MINGW64?~ $?cat?.gitconfig [merge]tool?=?vimdiff [user]name?=?wsyhtemail?=?891958201@qq.com [color]ui?=?true [alias]st?=?statusco?=?checkoutci?=?commitbr?=?branchunstage?=?reset?HEADlast?=?log?-1lg?=?log?--color?--graph?--pretty=format:'%Cred%h%Creset?-%C(yellow)%d%Creset?%s?%C?????????????????????????????????????????????????????????????????????????????????????????????????????green(%cr)?%C(bold?blue)<%an>%Creset'?--abbrev-commitAdministrator@YYBFVJDMAPF13NB?MINGW64?~

可以看到.gitconfig文件寫入了我在命令行設置別名的命令,如果你加--global就會寫入這個配置文件,你也可以直接進到這個文件添加,而不在終端執行命令,要刪除別名的話進到這個文件把相應的別名命令刪除即可,這個文件是針對當前用戶生效的


第二個配置文件

在倉庫目錄下.git/config目錄下,此配置文件,是針對當前倉庫有效,所以在當你在終端執行命令的時候不加--global就會把命令寫入這個文件,你也可以進到這個文件進行添加刪除別名命令,下面我們來看配置文件內容

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/.git?(GIT_DIR!) $?pwd /f/demo1/.gitAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1/.git?(GIT_DIR!) $?cat?config [core]repositoryformatversion?=?0filemode?=?falsebare?=?falselogallrefupdates?=?truesymlinks?=?falseignorecase?=?true [branch?"master"] [remote?"origin"]url?=?git@github.com:wsyht/demo_test.gitfetch?=?+refs/heads/*:refs/remotes/origin/* [branch?"master"]remote?=?originmerge?=?refs/heads/master [branch?"wsyht"]remote?=?originmerge?=?refs/heads/wsyht #[alias]#br?=?branch

添加方法一樣,跟上面的第一個配置文件.gitconfig一樣,這里我只是為了演示,所以我把他注釋掉了



二、標簽操作

1)創建標簽

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?branchmaster *?wsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?v1.0??#創建標簽v1.0Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag v1.0Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?log?--pretty=oneline?--abbrev-commit ca2b12a?Merge?branch?'wsyht'?of?github.com:wsyht/demo_test?into?wsyht 805dcba?wo?add?111?demo e4ace0b?zhangsan?add?111?demo1 924fcc5?commit?wsyht 55c5d89?222 6bbbcdf?Merge?branch?'master'?of?github.com:wsyht/demo_test 5e368ff?test?commit 9d505e6?commit?wsyht cd961d2?merged?bug ed1eded?commit?bug 0631e15?wsyht?commit 3a59897?wsyht?commint c1e71b1?test 3020d4c?oo d497da7?Delete?demo2.txt d693375?888 07e6d4c?777 43185ac?delete?test1.txt 7ecdd08?一次性提交所有文件 fc33a37?1111 85ce2b6?4444 8445579?文件增加2222一行 25e4895?增加1111一行 a7e593c?demo1提交Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?v1.1?805dcba??#通過指定他的號碼來給他創建標簽Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?show?v1.1 commit?805dcba19f99a6057fc1eabdd75acb7f386d29ed Author:?wsyht?<891958201@qq.com> Date:???Sat?Jul?30?22:26:43?2016?+0800wo?add?111?demodiff?--git?a/demo1.txt?b/demo1.txt index?5ff510a..f1bde10?100644 ---?a/demo1.txt +++?b/demo1.txt @@?-1,3?+1,4?@@test222333 +111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?show?v1.0 commit?ca2b12a4cdd0e496bb0dec43c45e2b50336982d0 Merge:?805dcba?e4ace0b Author:?wsyht?<891958201@qq.com> Date:???Sat?Jul?30?22:28:58?2016?+0800Merge?branch?'wsyht'?of?github.com:wsyht/demo_test?into?wsyhtAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?-a?v0.3?-m?"我的第三個標簽"Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?-a?v0.3?-m?"我的第三個標簽"?e4ace0b fatal:?tag?'v0.3'?already?existsAdministrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?-a?v0.4?-m?"我的第三個標簽"?e4ace0b??#-a?指定標簽號,-m?指定描述的內容Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag v0.3 v0.4 v1.0 v1.1Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?show?v0.4 tag?v0.4 Tagger:?wsyht?<891958201@qq.com> Date:???Sat?Jul?30?22:53:38?2016?+0800我的第三個標簽commit?e4ace0bfa22f9e19913f95282fa5176a0b708be3 Author:?wsyht?<891958201@qq.com> Date:???Sat?Jul?30?22:20:56?2016?+0800zhangsan?add?111?demo1diff?--git?a/demo1.txt?b/demo1.txt index?5ff510a..f1bde10?100644 ---?a/demo1.txt +++?b/demo1.txt @@?-1,3?+1,4?@@test222333 +111Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag??#查看所有標簽 v0.3 v0.4 v1.0 v1.1



2)刪除和push標簽

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?-d?v0.3 Deleted?tag?'v0.3'?(was?784bb96)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag v0.4 v1.0 v1.1Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?push?origin?v0.4??#提交單個標簽 Counting?objects:?1,?done. Writing?objects:?100%?(1/1),?180?bytes?|?0?bytes/s,?done. Total?1?(delta?0),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.git*?[new?tag]?????????v0.4?->?v0.4Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?push?origin??--tags???#提交所有標簽 Total?0?(delta?0),?reused?0?(delta?0) To?git@github.com:wsyht/demo_test.git*?[new?tag]?????????v1.0?->?v1.0*?[new?tag]?????????v1.1?->?v1.1


在GitHub上查看

標簽都出來了,push成功


3)刪除遠程庫的標簽

Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?tag?-d?v0.4 Deleted?tag?'v0.4'?(was?dea0b58)Administrator@YYBFVJDMAPF13NB?MINGW64?/f/demo1?(wsyht) $?git?push?origin?:refs/tags/v0.4 To?git@github.com:wsyht/demo_test.git-?[deleted]?????????v0.4

可以看到,遠程庫的標簽已經刪除成功



最后再說一下,有的人說SVN有工作可以提交上傳,但是Git卻要敲命令,現在我告訴你Git也是有工具的,如果你不喜歡命令行的話,你可以去下載這個工具,github sourcetree?如下圖,這是我網上找來的圖片,界面就是這個樣子


但是我還想說,我還是喜歡用命令行,上面那個工具我沒用過,我相信大多數人都是用命令行,因為你通過命令行去做執行的話,你會更有滿足感,你操作速度會更快更靈活更有快感,而且你知道每一步的步驟,你也不會混亂,相信我,用命令行吧,我相信大多數人都是用命令git bash的,放棄這個工具吧


Git常用命令總結:

git help git ? ? ? ? ? ? ? ?#查看git命令幫助

git config --help ? ? ? ? ? ? #查看config幫助

git config --global user.name 'wsyht' ? ? ? ? ? #設置用戶名標識

git config --global user.email t89191958201@139.com ?#設置郵箱標識

git config --list ? ? ? ? ? ?#查看配置內容

git init ? ? ? ? ? ? ? ? ?#創建版本庫

git add 文件名 ? ? ? ? ? ? ?#添加到暫存區

git commit -m'你描述的內容' ?#提交

git status ?? ? ? ? #查看狀態

git diff ?文件名 ? ? #查看文件比較

git log ? ? ? ? ? ?#查看提交的歷史記錄

git log --graph --pretty=oneline --abbrev-commit ? ? #--graph以圖形化顯示,--pretty=oneline省略部分信息輸出,--abbrev-commit則是縮短版本號簡短顯示

git reset --hard HEAD^ ? ? ? #git reset --hard HEAD^

git reset --hard HEAD^^ ? ? ?#git reset --hard HEAD^^

git reset --hard HEAD~100 ? ? #回退到前100個版本

git reflog? ? ? ? ? ? ? #獲取版本號

git reset --hard 版本號 ? ? ?#恢復版本

git checkout -- 文件名 ? ? ? #撤銷工作區的修改

git checkout .? ? ? ? ? ? #撤銷工作區的修改

git reset HEAD 文件名? ? ? ?#轍消暫存區的修改

git remote add origin git@github.com:wsyht/demo_test.git ? #添加遠程url連接

git push -u origin master ? ?#第一次push需要加-u

git remote rm origin ? ? ? #刪除遠程默認倉庫名"origin

git branch ? ? #查看分支

git branch 分支名字 ? ? ? ? ?#創建分支 ? ? ? ? ? ? ?

git checkout 分支名字 ? ? ? ? #切換分支

git checkout -b 分支名字 ? ? ? #創建切換分支

git merge 分支名字 ? ? ? ? ? #合并某分支到當前分支

git branch -d 分支名字 ? ? ? ?#刪除分支

git branch -D wsyht ? ? ? ? ?#大D強制刪除

git stash? ? ? ? ?#儲藏當前修改狀態

git stash list ? ? ?#查看儲藏內容

git stash pop ? ? ? #恢復原來修改的狀態

git remote -v ? ? ? #查看遠程庫的詳信息

git pull ? ? ? ? ? ? ?#更新本地工作區

git fetch origin ? ? ? ? #取所有遠程庫的分支到本地

git fetch origin 分支名 ? ?#取某個分支

git branch 分支名 origin/分支名 ? ? ? ? ? ? ?#創建遠程庫的分支到本地

git clone git@github.com:github注冊名/項目名.git ? #克隆GitHub項目到本地

git clone git@server ip:/倉庫路徑/倉庫目錄名字 ? ?#克隆Git服務器項目到本地

git check-ignore -v xx.xx ? ? ?#查看要添加的那個文件在.gitignore的哪一行設置了忽略

git add -f 文件名 ? ? ? ? ? ?#強制添加此文件到暫存區

it tag v1.0 ? ? ? ?? ? ? ?#創建標簽v1.0

git tag v1.1 805dcba ? ? ? ? ?#通過指定他的號碼來給他創建標簽

git tag -a v0.4 -m "我的第三個標簽" e4ace0b ? ?#-a 指定標簽號,-m 指定描述的內容

git tag ? ? ? ? ? ? ? ? ? ? ? ? ? ?#查看所有標簽

git tag -d v0.3? ? ? ? ? ? #刪除標簽

git push origin v0.4 ?? ? ? ?#提交單個標簽

git push origin ?--tags ? ? ? #提交所有標簽

git tag -d v0.4? ? ? ? ? ? ?#刪除遠程標簽第一步

git push origin :refs/tags/v0.4 ?#刪除遠程標簽第二步

git config --global alias.st status ? #把status 配置成別名 st,其他命令設別名依此類推

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" ?#日志別名配置


Git擴展技術:Git flow工作流程?

這個工作流程大家可以去百度上搜索一下文章來看看,這個我目前也不懂,不過他是一個不錯的東西,他能夠規范化你的開發流程


轉載于:https://blog.51cto.com/yht1990/1832284

總結

以上是生活随笔為你收集整理的Git从入门到熟悉的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲在线高清 | 亚洲综合在线一区二区三区 | 超碰在线免费97 | 国产在线理论片 | 狠狠色丁香久久婷婷综合五月 | 日韩首页 | 五月婷婷在线视频观看 | 欧美精品少妇xxxxx喷水 | 免费又黄又爽的视频 | 欧美日韩国产亚洲乱码字幕 | 日韩欧美在线一区 | 午夜精品久久久久久久99水蜜桃 | 亚洲精品国产精品乱码在线观看 | 在线免费试看 | 久久超碰网 | 在线亚洲播放 | 天堂av在线免费观看 | 国产伦精品一区二区三区照片91 | 久久成人在线 | 精品国产免费人成在线观看 | 欧美韩国在线 | 九色视频自拍 | 97超碰在线播放 | 久色网| 日日夜夜骑 | 久草手机视频 | 粉嫩av一区二区三区入口 | 操操操影院 | 在线观看你懂的网站 | 又黄又爽免费视频 | 亚洲精品在线免费播放 | 色窝资源 | 成人在线一区二区 | 超碰97在线看 | av午夜电影| 最新影院 | 欧美另类一二三四区 | 色成人亚洲| 99热九九这里只有精品10 | 国产成人av网 | 欧美一区二区在线 | 五月天天av| 国产精品久久人 | 亚洲电影院 | 黄色午夜网站 | 激情视频91| 伊人宗合网| 九九热re| 午夜在线免费观看视频 | 色吊丝在线永久观看最新版本 | 精品极品在线 | 成人av视屏 | 五月天视频网站 | 婷婷激情影院 | 在线欧美中文字幕 | 久久久久久久久久伊人 | 成人毛片在线视频 | 国产精品麻豆免费版 | 九九视频在线 | 91精彩视频 | 中文字幕日韩国产 | 国产高清免费在线观看 | 奇米影视在线99精品 | 色欧美成人精品a∨在线观看 | 九九热精品视频在线播放 | 天天草综合网 | av电影av在线 | 国产精品99免视看9 国产精品毛片一区视频 | 国产视频69 | 在线中文日韩 | 中国一级片视频 | 97超级碰 | 欧美在线资源 | 久久精品第一页 | 欧美激情一区不卡 | 久久在线一区 | 久草在线欧美 | 97在线观看免费 | 久久久精品视频成人 | 日本精油按摩3 | 91精品国产九九九久久久亚洲 | 久久国产精品小视频 | 亚洲精品美女久久久久网站 | 国产午夜免费视频 | 国产真实在线 | 国产做aⅴ在线视频播放 | 日日夜夜操av | 久久九九九九 | 亚洲国产成人久久 | 伊人五月天 | 国内揄拍国内精品 | 久久理论片 | 亚洲狠狠婷婷综合久久久 | 在线观看日韩视频 | 免费高清看电视网站 | 日韩精品电影在线播放 | 成人精品视频 | 天天干 夜夜操 | 欧美一区日韩一区 | 国产精品久久久久久模特 | 精品国产伦一区二区三区 | 免费91麻豆精品国产自产在线观看 | 欧美激情精品久久久久久免费印度 | 亚洲精品免费观看 | 久久久久免费精品 | 高清在线一区 | 中文字幕在线视频第一页 | 玖玖色在线观看 | 久久99精品视频 | 91香蕉视频在线下载 | 国产91综合一区在线观看 | 不卡视频在线看 | 国产精品毛片久久久久久久 | 激情五月综合网 | 免费一级日韩欧美性大片 | 婷婷中文字幕 | 国产精品一区二 | 九九久久精品 | 天天干天天草天天爽 | 日韩成人在线免费观看 | 天无日天天操天天干 | 精品一区二区亚洲 | 在线视频91 | 超碰免费97 | 探花视频免费观看高清视频 | 国产亚洲综合精品 | 97视频免费在线观看 | 美女福利视频网 | 国产视频一区精品 | 亚洲精品福利在线 | av网址最新 | 国产性xxxx| 国产精品久久久久婷婷 | 日av免费 | 国产精品成人一区二区三区 | 国产午夜精品在线 | 久久超碰网 | 黄色av网站在线免费观看 | 91亚洲影院 | 一区二区三区四区五区在线视频 | 3d黄动漫免费看 | 最近的中文字幕大全免费版 | a极黄色片 | 欧美视频xxx | 午夜精品久久久久久久99无限制 | 97超视频免费观看 | 在线黄色国产电影 | 成人av一区二区兰花在线播放 | 日韩在线免费 | 精品国产一区二区三区噜噜噜 | 天天插天天射 | 中文字幕在线免费看线人 | 美女久久久久久久久久久 | 又长又大又黑又粗欧美 | 亚洲精品美女在线观看播放 | 99在线精品视频在线观看 | 成年人免费看av | 久久久www成人免费精品张筱雨 | 涩涩爱夜夜爱 | av中文在线播放 | 国内精品福利视频 | 四虎8848免费高清在线观看 | 91网免费看 | 亚洲天堂精品视频 | 国产精品免费一区二区 | 国产黄 | 麻豆网站免费观看 | 久久精品国产亚洲 | 久久久久久国产一区二区三区 | 久久精品免费看 | 国产亚洲视频在线免费观看 | 九九99 | 美女国内精品自产拍在线播放 | 天天色天天操天天爽 | 日韩大片在线播放 | 国产成人久久精品一区二区三区 | 久久爱综合 | 操操操操网| 国产高清视频网 | 久久电影日韩 | 日韩中文字幕免费电影 | 亚洲欧美国产精品 | 久草在线费播放视频 | 99re亚洲国产精品 | 国产白浆视频 | 99亚洲精品在线 | 啪嗒啪嗒免费观看完整版 | 一区二区视| 国产免费观看视频 | 亚洲一区二区观看 | 国产成人av在线 | 国产成人福利在线 | 日韩免费一级a毛片在线播放一级 | 免费看片黄色 | 爱爱av在线 | 黄色福利网 | 人人爱爱人人 | 丁香网五月天 | 亚洲 成人 一区 | 婷婷激情站 | 麻豆视频91 | 午夜色场 | 亚洲欧洲国产视频 | 久久久精品午夜 | 九九一级片 | 成人av电影免费 | 欧美a免费 | 亚洲三级黄色 | av成人黄色 | 欧美va天堂在线电影 | 精品国产乱码久久久久久浪潮 | 亚洲爱爱视频 | 人人爽人人搞 | 丰满少妇在线 | 97爱 | 国产精品久久久久久久久久ktv | 亚洲精品99久久久久中文字幕 | 在线中文字幕av观看 | 国产一区免费视频 | 国产精品亚洲片在线播放 | 91精品国产福利在线观看 | 国产探花| 丁香花在线观看免费完整版视频 | 欧美日韩一区二区三区不卡 | 欧美二区在线播放 | 2018好看的中文在线观看 | 午夜国产影院 | 午夜视频一区二区三区 | 色综合久久五月 | 韩国av一区二区三区 | 欧美激情精品久久久久久免费印度 | 亚洲精品视频久久 | av在线激情 | 一区二区精品视频 | 色综合天天天天做夜夜夜夜做 | 婷婷在线播放 | 欧美三人交 | 伊人日日干 | 一区二区不卡视频在线观看 | 丁香婷婷久久久综合精品国产 | 亚洲天堂在线观看完整版 | 国产午夜精品理论片在线 | 福利网在线 | 91久久久久久国产精品 | 国产在线观看高清视频 | 97在线观看免费高清完整版在线观看 | 97人人澡人人爽人人模亚洲 | 天天操天天操一操 | 日本中文字幕系列 | 精品天堂av| 精品国偷自产在线 | 国产精品va在线观看入 | 99久久99久久精品国产片果冰 | 久久久色 | 国产视频综合在线 | 天天做夜夜做 | 成年一级片 | 色午夜| 999抗病毒口服液 | 天天综合入口 | 亚洲精品久久久蜜桃直播 | 精品国产1区二区 | 91精品系列| 日本不卡123区 | 波多野结衣日韩 | 久草在线视频资源 | 狠狠干天天色 | 天天视频色版 | 国产精品成人在线观看 | 91精品在线免费观看 | 亚洲精品视 | 天堂av在线网址 | 永久免费精品视频网站 | 日韩高清免费电影 | 免费看片网页 | 手机av电影在线 | 亚洲天堂va | 在线国产观看 | 麻豆免费视频 | 99精品久久久久久久久久综合 | av先锋影音少妇 | 91在线产啪 | 亚洲无吗av | 婷婷婷国产在线视频 | 日韩av成人在线 | 欧美在线1区 | 国产精品麻豆视频 | 国产精品video爽爽爽爽 | 波多野结衣在线观看一区二区三区 | 麻豆国产网站入口 | 麻豆国产在线播放 | 丁香色婷婷 | 特级西西444www大胆高清无视频 | 国际av在线 | 97视频免费在线 | 欧美日韩三级 | 国产免费久久 | 激情综合色综合久久综合 | 99久热在线精品视频成人一区 | 亚洲电影久久 | 91九色最新| 很污的网站 | 国产特黄色片 | 91成人网在线 | 欧美成人黄色片 | 国精产品一二三线999 | 国产美女主播精品一区二区三区 | 国产精品久久久久一区二区三区共 | 五月婷婷一级片 | 免费看的黄色小视频 | 欧美日韩中文另类 | 欧美激情视频在线观看免费 | 亚洲精品在线视频播放 | 国产手机视频在线观看 | 8x成人在线 | 能在线观看的日韩av | 精品久久久久久久久久久院品网 | 久久久久久国产精品 | 一区二区三区电影 | 草樱av | 免费一级日韩欧美性大片 | 国产真实精品久久二三区 | 91香蕉视频黄 | 丁香视频| 中文国产字幕在线观看 | 日韩久久久久久久久久久久 | 欧美色精品天天在线观看视频 | 天天插天天干天天操 | 亚洲欧美国产精品 | 国产亚洲精品久久久久久网站 | 狠狠gao| 久久久免费看视频 | 色综合亚洲精品激情狠狠 | 97视频在线观看成人 | 欧美少妇xxxxxx | 免费在线观看成人小视频 | 精品一区电影国产 | 97超碰人人澡 | 久久少妇 | www.xxx.性狂虐 | 亚洲三级av | 国产在线不卡精品 | 就操操久久 | 久久综合久久88 | 免费在线观看a v | 日韩电影中文字幕在线 | wwwwwww黄 | 久久久久国产精品一区二区 | 人人艹视频 | 国产精品乱码久久久久 | 国产精品九九九九九九 | 中文字幕电影在线 | 天天摸日日操 | 日韩精品一区二区三区免费观看 | 中文字幕亚洲欧美日韩 | 日批在线观看 | 精品久久久久久一区二区里番 | 国产精品视频免费看 | 在线观看韩日电影免费 | 久草免费手机视频 | 国产区精品区 | 色a网| 视频一区二区在线 | 天天精品视频 | 99久久久国产精品免费99 | 91久久久久久国产精品 | 成人在线免费小视频 | 色av男人的天堂免费在线 | 欧美成人在线免费 | 麻豆影视在线观看 | 91成人免费观看视频 | 国产69熟| 一区二区三区在线看 | 中文国产在线观看 | 久久黄色免费观看 | 成年人av在线播放 | 国产精品久久久久久久久婷婷 | 久草在线最新免费 | 久久国产剧场电影 | 九九九九九九精品任你躁 | 亚洲欧美在线观看视频 | 天天爽天天爽天天爽 | 国产成人一区二区三区久久精品 | 亚洲国产精品va在线看黑人 | 色综合久久久久久久 | 婷婷去俺也去六月色 | 色永久免费视频 | 成人久久免费 | 在线91视频 | 在线观看爱爱视频 | 免费视频成人 | 99 视频 高清 | 九色porny真实丨国产18 | 国产成人a v电影 | 久久国产精品久久国产精品 | 99精品国产免费久久久久久下载 | 天天射色综合 | 99超碰在线播放 | 99爱精品在线 | 人人爽人人插 | 一区二区三区三区在线 | 99视频在线观看免费 | 欧美日韩在线视频一区二区 | 久热免费 | 日韩高清不卡一区二区三区 | 西西www4444大胆在线 | 美女网站久久 | 亚洲国产精品电影 | 亚洲激情综合 | 九九九视频在线 | 久草在线资源观看 | 日日夜夜骑 | 日韩高清激情 | 久久免费视频国产 | 黄色毛片一级片 | 久久99这里只有精品 | av电影不卡 | 免费在线91| 亚洲人成免费网站 | 色狠狠综合天天综合综合 | 日韩超碰在线 | 成人av免费播放 | 日韩视频一区二区在线观看 | 色综合五月天 | 国产高清精品在线观看 | 国产亚洲精品久久久久久网站 | 欧美小视频在线 | 国产成人精品一区二区在线 | 狠狠操狠狠插 | 亚洲精品1区2区3区 超碰成人网 | 成人av在线影院 | 国产精品久久久久久久电影 | 亚洲理论在线观看 | 久草www| 中文字幕高清免费日韩视频在线 | 天堂av观看 | 天天操欧美 | 国产精品免费观看视频 | 国产一级黄 | 精品一区二区日韩 | 免费观看黄色12片一级视频 | 九九九九热精品免费视频点播观看 | 天天操天天曰 | av电影免费观看 | 激情五月网站 | 国产91成人 | 亚洲一级特黄 | 91精品视频在线免费观看 | 在线免费观看黄色av | 国内精品久久久久影院一蜜桃 | 91亚洲国产成人久久精品网站 | 香蕉视频在线观看免费 | 久久国产精品久久精品 | 日韩欧美视频免费在线观看 | 国产99久久久国产精品免费二区 | 日韩色一区二区三区 | 欧美精品日韩 | 日日操狠狠干 | 国产在线久草 | 四虎在线免费 | 99九九视频 | 日韩在线视频不卡 | 久久激情视频免费观看 | 欧美国产日韩久久 | 精品一区 在线 | 在线免费色视频 | 99精品视频免费 | 国产一区视频在线播放 | 偷拍精偷拍精品欧洲亚洲网站 | 国产视频首页 | 亚洲专区 国产精品 | 国产精品尤物 | 夜夜爱av | 制服丝袜在线 | 成人av电影免费在线播放 | 免费看十八岁美女 | 狠狠干网址 | 在线观看91 | 黄色软件在线观看 | 日韩高清一区在线 | 精品久久久久久电影 | 日韩视频区 | www.色的| 日韩av高清在线观看 | 少妇性色午夜淫片aaaze | 亚洲国产精品视频 | 久久影院一区 | 成人久久久精品国产乱码一区二区 | 欧美一级日韩三级 | 人人看看人人 | 少妇bbb| 中文av在线免费观看 | 久草精品视频在线看网站免费 | 精品超碰 | 精品福利在线视频 | 日韩精品黄| 免费观看第二部31集 | 国产生活一级片 | 99av国产精品欲麻豆 | 丁香六月婷婷开心 | 国产一卡久久电影永久 | 国产精品18p| 国产精品免费不卡 | 精品久久美女 | 手机av看片| 91自拍视频在线观看 | 色欧美日韩| 99这里只有 | 中文字幕久久亚洲 | 亚洲一区二区天堂 | 国产无套一区二区三区久久 | 狠狠色噜噜狠狠狠狠2022 | 2019中文 | 婷婷网五月天 | 久久一级片 | 免费看片成年人 | 99 视频 高清 | 国产一区私人高清影院 | 亚洲人久久久 | av电影中文字幕在线观看 | 久久九九九九 | 黄污在线观看 | 999久久久免费精品国产 | 成人精品久久久 | 99免费在线播放99久久免费 | 欧美三级高清 | 国产精选视频 | 亚洲欧洲av | 亚洲免费不卡 | 在线观看免费91 | 丁香六月在线观看 | 97超碰成人 | 992tv人人草 黄色国产区 | 亚洲精品白浆高清久久久久久 | 一二三区av| 欧美日韩精品影院 | 国产日韩精品一区二区在线观看播放 | 国产在线专区 | 区一区二在线 | 美女福利视频 | 操处女逼 | 日韩首页 | 欧美二区在线播放 | 丁香五香天综合情 | 九色91福利 | 91精品国产自产在线观看永久 | 综合久久2023 | 国产不卡av在线 | 少妇bbb| 日日夜夜精品免费观看 | 国产精品视频一二三 | a级片久久 | 久久久久夜色 | 成人在线视频观看 | 麻豆视频免费观看 | h文在线观看免费 | 黄色精品网站 | 中文字幕在线观看免费高清完整版 | 成年人免费在线观看 | 成年人视频在线免费播放 | 婷婷av网 | www.五月婷婷| 国产91精品一区二区麻豆网站 | 国产又粗又猛又黄视频 | 久久久久国产精品免费免费搜索 | 天堂视频一区 | 91麻豆精品国产91久久久无需广告 | 中文字幕中文字幕中文字幕 | 国产专区日韩专区 | 波多野结依在线观看 | 人人干网站 | 狠狠干免费 | 成年人国产在线观看 | 国产精品第2页 | 久久久亚洲麻豆日韩精品一区三区 | 亚洲一区免费在线 | 亚洲一区二区三区毛片 | 综合网天天色 | 91 在线视频| 午夜国产福利在线 | 久久久免费看 | 久久视频在线免费观看 | 国产成人亚洲精品自产在线 | 黄色aa久久 | 欧美亚洲专区 | 成人在线观看日韩 | 色噜噜狠狠狠狠色综合久不 | 福利精品在线 | 97人人添人澡人人爽超碰动图 | 亚洲午夜久久久久久久久久久 | 国产97色在线 | 国产韩国精品一区二区三区 | 黄色毛片观看 | 麻豆91网站| 超碰在线人人艹 | 超碰在线98| 日韩免费在线看 | 日韩高清无线码2023 | 中文字幕网站视频在线 | 国产精品视频app | 色噜噜日韩精品欧美一区二区 | 一区二区三区久久精品 | 欧美小视频在线观看 | www视频免费在线观看 | 久久久久婷| 久99久精品视频免费观看 | 黄色影院在线观看 | www视频在线观看 | 久久综合免费视频 | 黄色一集片 | 四虎成人精品 | 亚洲国产精品va在线看 | 久草免费手机视频 | 日韩高清不卡一区二区三区 | 久久久久久网址 | 日韩动漫免费观看高清完整版在线观看 | 中文字幕123区 | 国产小视频免费观看 | 亚洲国产中文字幕在线视频综合 | 成人理论在线观看 | ww视频在线观看 | www.五月天色| 亚洲一级黄色片 | 69久久99精品久久久久婷婷 | 日韩av一区二区在线影视 | 久久综合中文字幕 | 国产精品久久久久一区二区 | 亚洲精品国产精品国 | 欧美一级性视频 | 色婷婷婷 | 在线观看岛国 | 国产91粉嫩白浆在线观看 | 色婷婷一区| 亚洲日本在线视频观看 | 成人aaa毛片 | 亚洲人成人在线 | 久久理论电影 | 中文字幕一区2区3区 | 国产成人av网 | 伊甸园av在线 | 免费电影一区二区三区 | 激情网站网址 | 大片网站久久 | 亚洲精品高清在线观看 | 欧美精品二区 | 国产美女久久久 | 国产最顶级的黄色片在线免费观看 | 九九视频这里只有精品 | 91理论片午午伦夜理片久久 | 日韩av线观看 | 国产精品九九久久99视频 | 欧美日韩在线免费观看 | 免费久久视频 | 少妇bbb搡bbbb搡bbbb′ | 亚洲精品视频一 | 青青色影院 | 国产女教师精品久久av | 午夜av在线播放 | 国产又粗又猛又黄又爽 | 午夜在线免费观看 | 黄a网| 综合网五月天 | 国产精品永久 | 中国美女一级看片 | 成人福利在线播放 | 天天操欧美 | 国产成人精品久久二区二区 | 久操视频在线观看 | 欧美了一区在线观看 | 国产精品永久免费视频 | 欧洲av不卡 | 久久一区二区三区超碰国产精品 | 九九久久成人 | 国产中文字幕视频在线 | 外国av网| 亚洲成熟女人毛片在线 | www.成人精品| 免费情缘| 最新高清无码专区 | 亚洲色影爱久久精品 | 中中文字幕av | 日本一区二区免费在线观看 | 国产精品久久电影网 | 成 人 黄 色视频免费播放 | 久久男人中文字幕资源站 | 欧美国产日韩激情 | 日韩三级在线 | 午夜av电影 | 最近高清中文在线字幕在线观看 | 天天爱天天插 | 黄色中文字幕 | 伊人手机在线 | 日日婷婷夜日日天干 | 美女免费视频一区 | 激情黄色一级片 | 黄色av一级 | 日本精品一二区 | 欧美日韩国产精品一区 | 93久久精品日日躁夜夜躁欧美 | 美女网站黄在线观看 | 黄色91免费观看 | 97超碰超碰久久福利超碰 | 成人国产网址 | 日韩av不卡在线播放 | 国内免费的中文字幕 | 免费看黄电影 | 国产成人一二片 | 免费亚洲黄色 | 久久这里只有精品视频首页 | 在线观看黄色大片 | 丁香视频免费观看 | 欧美va天堂va视频va在线 | 久久国产亚洲视频 | 亚洲午夜久久久久久久久电影网 | 91精品免费在线视频 | 黄色av在| 日本三级全黄少妇三2023 | 欧美精品乱码久久久久久 | 人人dvd| 在线亚洲欧美视频 | 欧美日韩另类视频 | 久久精品亚洲精品国产欧美 | 日本不卡一区二区三区在线观看 | 日韩av电影国产 | 香蕉视频国产在线 | 国产一区在线观看视频 | 天天天干 | 黄色国产成人 | 中文字幕中文字幕在线一区 | 亚洲激情六月 | 激情av在线资源 | 亚洲国产欧洲综合997久久, | 天天夜操 | 国产精品久久久久久久久久久免费看 | 国产香蕉在线 | 99久久精品免费一区 | 亚洲激情六月 | 五月天六月丁香 | 91九色在线观看 | 久久久久久久久久久久亚洲 | 欧美精品亚州精品 | 福利片免费看 | 成人av一区二区兰花在线播放 | 亚洲www天堂com | 国产最顶级的黄色片在线免费观看 | 亚洲日韩欧美一区二区在线 | 中文字幕乱码亚洲精品一区 | 欧日韩在线视频 | 五月婷婷另类国产 | 久久精品亚洲精品国产欧美 | 99免费在线视频观看 | 国产在线久草 | 天天插天天干天天操 | 天天操天天摸天天干 | 极品嫩模被强到高潮呻吟91 | 夜夜躁日日躁狠狠躁 | 91麻豆精品国产自产在线 | 久草久热 | 国产 日韩 在线 亚洲 字幕 中文 | av色影院 | 成年人免费电影在线观看 | 欧美另类xxxxx | www.天天操.com | 国产 在线观看 | 香蕉免费 | 一区二区不卡高清 | 成人在线观看免费视频 | 黄色电影小说 | 国产在线国产 | 麻豆视频在线 | 香蕉视频4aa| 亚洲一区二区观看 | 亚洲欧美视屏 | 在线观看91精品视频 | 亚洲艳情 | 久久激情视频 久久 | 日韩精品免费一线在线观看 | 欧美孕妇视频 | 婷婷av电影 | 国产福利在线不卡 | 久久国产一区 | 女人高潮一级片 | 91传媒免费在线观看 | 午夜精品久久久久久久99无限制 | 999日韩| 日韩精品免费一区二区三区 | 国产高清在线a视频大全 | 午夜久久影院 | 国产一区二区三区高清播放 | 超碰大片 | 国产精品毛片久久久 | 色婷婷狠狠| 国产精品一区二区三区在线免费观看 | 日韩电影黄色 | 日日噜噜噜噜夜夜爽亚洲精品 | 69亚洲视频 | 2023国产精品自产拍在线观看 | 成人久久电影 | 亚洲视频在线视频 | 五月天久久综合网 | 麻豆国产精品一区二区三区 | 日韩精品一区二区三区中文字幕 | 久久999久久| 国产一区二区在线播放视频 | 97碰在线| 精品国内自产拍在线观看视频 | 久久老司机精品视频 | 久久综合婷婷综合 | 免费的成人av | 日韩久久激情 | 91视频88av| 久久国产精品久久精品 | 精品久久毛片 | 欧美日韩国产一区二区三区在线观看 | 高清免费在线视频 | 亚洲国产精品传媒在线观看 | 精品无人国产偷自产在线 | 五月激情天 | h动漫中文字幕 | 久久1区| free. 性欧美.com | 久久久久国产视频 | 日本久久视频 | 国产精品女主播一区二区三区 | 精品久久久久久久久久 | 天天干人人插 | 国产精品国产三级国产aⅴ入口 | 日韩电影中文字幕在线观看 | 欧美在线观看禁18 | 在线观看激情av | 久久国产美女视频 | 在线看免费 | 天天躁日日躁狠狠 | 青青视频一区 | av在线com| www久| 三级a视频| av高清网站在线观看 | 91理论片午午伦夜理片久久 | av中文资源在线 | 亚洲精品www久久久久久 | 色在线中文字幕 | 狠狠天天 | 亚洲精品午夜国产va久久成人 | 欧美在线一级片 | 天天草天天爽 | 免费a v视频| 蜜臀av夜夜澡人人爽人人 | 日韩色爱 | 五月天天在线 | 久久综合综合久久综合 | 免费视频 三区 | 日韩欧美视频一区 | 国产精品久久精品国产 | 成人宗合网 | 亚洲高清视频在线观看免费 | 欧美二区视频 | 91中文在线| 国产精品久久9 | 免费日韩电影 | 久久亚洲福利 | 在线观看www. | 国产在线视频一区二区 | 福利视频午夜 | 99久久99精品 | 久久99视频免费观看 | 精品国产一区二区三区免费 | 中文字幕电影高清在线观看 | 国产网红在线 | 色播五月激情综合网 | 久久xx视频 | 日日夜夜免费精品 | 一区二区三区韩国免费中文网站 | 视频在线91| 91在线看片| 色黄视频免费观看 | 国产精品高 | 999久久精品 | 久久dvd| 天天操天天透 | 亚洲国产精品一区二区久久,亚洲午夜 | 视频国产在线 | 精品亚洲男同gayvideo网站 | 亚洲一区 av| 中文字幕免费成人 | 久久成人午夜 | 精品久久久成人 | 日韩在线视频播放 | 国产亚洲综合在线 | 久草在线免费在线观看 | 日韩一级成人av | av电影亚洲| 色综合色综合久久综合频道88 | 成人免费在线播放 | 1024在线看片 | 五月婷婷爱 | 九九热免费视频在线观看 | 国产精选在线观看 | 免费在线观看视频a | 久久久久国产精品免费 | 91成人观看 | 日本视频久久久 | 亚洲影视资源 | 色综合久久久久久久久五月 | 国产福利在线免费观看 | 中文字幕一区二区三区在线视频 | 日韩精品在线观看av | 亚洲精品免费观看视频 | 黄色小网站免费看 | 欧美坐爱视频 | 麻豆视频国产 | 视频一区二区免费 | 日韩电影中文字幕在线 | 久草在线视频首页 | 五月婷久久| 国产精品视频免费看 | 亚洲精品午夜久久久久久久久久久 | 日韩二区三区在线 | 国产一区二区日本 | 婷婷色伊人 | 久久久久99精品国产片 | 国产流白浆高潮在线观看 | 丰满少妇对白在线偷拍 | 国产精品电影一区 | 97超碰人人澡人人爱学生 | 亚洲最新av网站 | 国产剧情在线一区 | 日韩久久久久久久久久 | 亚洲一区二区视频在线播放 | 香蕉免费 | 成人小视频在线免费观看 | 国产视频18 | 亚洲精品无 | 亚洲视频在线观看 | 天天操天天射天天爽 | 国产精品久久 | 成人免费一区二区三区在线观看 | 青青草在久久免费久久免费 | 国产成人精品久 | 国产伦理久久精品久久久久_ | 久久国产精品99久久久久 | 久久久久久伊人 | 在线国产精品一区 | 91九色精品 | 久久99精品一区二区三区三区 | 日本黄色免费观看 | 久久伊人国产精品 | 91麻豆.com| 午夜电影久久久 | 成年人在线免费看视频 | 国产成人久久精品77777综合 | 激情久久影院 | 色吧久久| 日日夜夜91 | 久久久久久久精 | 久久国产精品免费一区 | 婷婷精品国产欧美精品亚洲人人爽 | 中文字幕在线成人 | 日韩av不卡在线观看 | 国产经典av | 五月综合色婷婷 | 国产亚洲精品成人 | 成人免费网视频 | 久久免费视频一区 | 欧美一级电影在线观看 | 国产黄色av影视 | 国产免费又爽又刺激在线观看 | 亚洲一级二级三级 | 午夜体验区| 一级黄色片在线免费看 | 欧洲亚洲精品 | 日韩中文字幕亚洲一区二区va在线 | 韩国精品在线观看 | 婷婷久久一区二区三区 | 中文av网 | www.夜夜骑.com | 人人爽人人香蕉 | 久久精品国产精品亚洲 | 一区二区三区在线免费 | 久久伊人精品一区二区三区 | 91麻豆看国产在线紧急地址 | 最新中文在线视频 | 久久99久久99免费视频 | 国产.精品.日韩.另类.中文.在线.播放 | 国产日韩欧美在线播放 | 99精品视频在线免费观看 | 日本久久成人中文字幕电影 | 亚洲视频 视频在线 | 国产综合激情 | 色诱亚洲精品久久久久久 | 人人爽人人爽人人片av | 亚洲午夜久久久久久久久电影网 | 亚洲欧美国产视频 | 最近中文字幕高清字幕免费mv | 欧美黄在线 | 一区三区视频 | av在线8 | 在线视频日韩精品 |