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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

git 从入门到精通

發布時間:2025/3/18 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git 从入门到精通 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

?

?

工程化專題之Git

?

Git 是一個開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目。

Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。

Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟件支持。

?

Git 與 SVN 區別

Git 不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。

如果你是一個具有使用 SVN 背景的人,你需要做一定的思想轉換,來適應 Git 提供的一些概念和特征。

Git 與 SVN 區別點:

  • 1、Git 是分布式的,SVN 不是:這是 Git 和其它非分布式的版本控制系統,例如 SVN,CVS 等,最核心的區別。

  • 2、Git 把內容按元數據方式存儲,而 SVN 是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似 .svn、.cvs 等的文件夾里。

  • 3、Git 分支和 SVN 的分支不同:分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄。

  • 4、Git 沒有一個全局的版本號,而 SVN 有:目前為止這是跟 SVN 相比 Git 缺少的最大的一個特征。

  • 5、Git 的內容完整性要優于 SVN:Git 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

    ?

?

?

在 Windows 平臺上安裝 Git 同樣輕松,有個叫做 msysGit 的項目提供了安裝包,可以到 GitHub 的頁面上下載 exe 安裝文件并運行:

安裝包下載地址:https://gitforwindows.org/

?

完成安裝之后,就可以使用命令行的 git 工具(已經自帶了 ssh 客戶端)了,另外還有一個圖形界面的 Git 項目管理工具。

在開始菜單里找到"Git"->"Git Bash",會彈出 Git 命令窗口,你可以在該窗口進行 Git 操作。

?

安裝

$ git config --global user.name "zz" $ git config --global user.email zz@email.com

?

查看配置信息

要檢查已有的配置信息,可以使用 git config --list 命令:

$ git config --list http.postbuffer=2M user.name=zz user.email=zz@email.com

有時候會看到重復的變量名,那就說明它們來自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不過最終 Git 實際采用的是最后一個。

這些配置我們也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

vim ~/.gitconfig

顯示內容如下所示:

[http]postBuffer = 2M [user]name = zzemail = zz@email.com

也可以直接查閱某個環境變量的設定,只要把特定的名字跟在后面即可,像這樣:

$ git config user.name zz

?

?

Git 工作流程

一般工作流程如下:

  • 克隆 Git 資源作為工作目錄。
  • 在克隆的資源上添加或修改文件。
  • 如果其他人修改了,你可以更新資源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果發現錯誤,可以撤回提交并再次修改并提交。

下圖展示了 Git 的工作流程:

?

Git 工作區、暫存區和版本庫

基本概念

我們先來理解下Git 工作區、暫存區和版本庫概念

  • 工作區:就是你在電腦里能看到的目錄。
  • 暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
  • 版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

下面這個圖展示了工作區、版本庫中的暫存區和版本庫之間的關系:

圖中左側為工作區,右側為版本庫。在版本庫中標記為 "index" 的區域是暫存區(stage, index),標記為 "master" 的是 master 分支所代表的目錄樹。

圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"游標"。所以圖示的命令中出現 HEAD 的地方可以用 master 來替換。

圖中的 objects 標識的區域為 Git 的對象庫,實際位于 ".git/objects" 目錄下,里面包含了創建的各種對象及內容。

當對工作區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。

當執行提交操作(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。

當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。

當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工作區則不做出改變。

當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。

當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。

?

Git 創建倉庫

你可以使用一個已經存在的目錄作為Git倉庫。


git init

Git 使用 git init 命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運行,所以 git init 是使用 Git 的第一個命令。

在執行完成 git init 命令后,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據,其他的項目目錄保持不變(不像 SVN 會在每個子目錄生成 .svn 目錄,Git 只在倉庫的根目錄生成 .git 目錄)。

使用方法

使用當前目錄作為Git倉庫,我們只需使它初始化。

git init

該命令執行完后會在當前目錄生成一個 .git 目錄。

使用我們指定目錄作為Git倉庫。

git init newrepo

初始化后,會在 newrepo 目錄下會出現一個名為 .git 的目錄,所有 Git 需要的數據和資源都存放在這個目錄中。

如果當前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然后提交:

$ git add *.c $ git add README $ git commit -m '初始化項目版本'

以上命令將目錄下以 .c 結尾及 README 文件提交到倉庫中。


git clone

我們使用 git clone 從現有 Git 倉庫中拷貝項目(類似 svn checkout)。

克隆倉庫的命令格式為:

git clone <repo>

如果我們需要克隆到指定的目錄,可以使用以下命令格式:

git clone <repo> <directory>

參數說明:

  • repo:Git 倉庫。
  • directory:本地目錄。

比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

執行該命令后,會在當前目錄下創建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄。

如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字:

?

$ git clone git://github.com/schacon/grit.git mygrit

?

Git 基本操作

Git 的工作就是創建和保存你項目的快照及與之后的快照進行對比。本章將對有關創建與提交你的項目快照的命令作介紹。


獲取與創建項目命令

git init

用 git init 在目錄中創建新的 Git 倉庫。 你可以在任何時候、任何目錄中這么做,完全是本地化的。

在目錄中執行 git init,就可以創建一個 Git 倉庫了。比如我們創建 runoob 項目:

$ mkdir runoob $ cd runoob/ $ git init Initialized empty Git repository in /Users/tianqixin/www/runoob/.git/ # 在 /www/runoob/.git/ 目錄初始化空 Git 倉庫完畢。

現在你可以看到在你的項目中生成了 .git 這個子目錄。 這就是你的 Git 倉庫了,所有有關你的此項目的快照數據都存放在這里。

ls -a .????..????.git

git clone

使用 git clone 拷貝一個 Git 倉庫到本地,讓自己能夠查看該項目,或者進行修改。

如果你需要與他人合作一個項目,或者想要復制一個項目,看看代碼,你就可以克隆那個項目。 執行命令:

git clone [url]

[url] 為你想要復制的項目,就可以了。

例如我們克隆 Github 上的項目:

$ git clone git@github.com:schacon/simplegit.git Cloning into 'simplegit'... remote: Counting objects: 13, done. remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13 Receiving objects: 100% (13/13), done. Resolving deltas: 100% (2/2), done. Checking connectivity... done.

克隆完成后,在當前目錄下會生成一個 simplegit 目錄:

$ cd simplegit/ $ ls README Rakefile lib

上述操作將復制該項目的全部記錄。

$ ls -a . .. .git README Rakefile lib $ cd .git $ ls HEAD description info packed-refs branches hooks logs refs config index objects

默認情況下,Git 會按照你提供的 URL 所指示的項目的名稱創建你的本地項目目錄。 通常就是該 URL 最后一個 / 之后的項目名稱。如果你想要一個不一樣的名字, 你可以在該命令后加上你想要的名稱。


基本快照

Git 的工作就是創建和保存你的項目的快照及與之后的快照進行對比。本章將對有關創建與提交你的項目的快照的命令作介紹。

git add

git add 命令可將該文件添加到緩存,如我們添加以下兩個文件:

$ touch README $ touch hello.php $ ls README????????hello.php $ git status -s ?? README ?? hello.php $

git status 命令用于查看項目的當前狀態。

接下來我們執行 git add 命令來添加文件:

$ git add README hello.php

現在我們再執行 git status,就可以看到這兩個文件已經加上去了。

$ git status -s A README A hello.php $

新項目中,添加所有文件很普遍,我們可以使用 git add . 命令來添加當前項目的所有文件。

現在我們修改 README 文件:

$ vim README

在 README 添加以下內容:# Runoob Git 測試,然后保存退出。

再執行一下 git status:

$ git status -s AM README A hello.php

"AM" 狀態的意思是,這個文件在我們將它添加到緩存之后又有改動。改動后我們再執行 git add 命令將其添加到緩存中:

$ git add . $ git status -s A README A hello.php

當你要將你的修改包含在即將提交的快照里的時候,需要執行 git add。

git status

git status 以查看在你上次提交之后是否有修改。

我演示該命令的時候加了 -s 參數,以獲得簡短的結果輸出。如果沒加該參數會詳細輸出內容:

$ git status On branch masterInitial commitChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: READMEnew file: hello.php

git diff

執行 git diff 來查看執行 git status 的結果的詳細信息。

git diff 命令顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別。git diff 有兩個主要的應用場景。

  • 尚未緩存的改動:git diff
  • 查看已緩存的改動: git diff --cached
  • 查看已緩存的與未緩存的所有改動:git diff HEAD
  • 顯示摘要而非整個 diff:git diff --stat

在 hello.php 文件中輸入以下內容:

<?php echo '菜鳥教程:www.runoob.com'; ?> $ git status -s A README AM hello.php $ git diff diff --git a/hello.php b/hello.php index e69de29..69b5711 100644 --- a/hello.php +++ b/hello.php @@ -0,0 +1,3 @@ +<?php +echo '菜鳥教程:www.runoob.com'; +?>

git status 顯示你上次提交更新后的更改或者寫入緩存的改動, 而 git diff 一行一行地顯示這些改動具體是啥。

接下來我們來查看下 git diff --cached 的執行效果:

$ git add hello.php $ git status -s A README A hello.php $ git diff --cached diff --git a/README b/README new file mode 100644 index 0000000..8f87495 --- /dev/null +++ b/README @@ -0,0 +1 @@ +# Runoob Git 測試 diff --git a/hello.php b/hello.php new file mode 100644 index 0000000..69b5711 --- /dev/null +++ b/hello.php @@ -0,0 +1,3 @@ +<?php +echo '菜鳥教程:www.runoob.com'; +?>

git commit

使用 git add 命令將想要快照的內容寫入緩存區, 而執行 git commit 將緩存區內容添加到倉庫中。

Git 為你的每一個提交都記錄你的名字與電子郵箱地址,所以第一步需要配置用戶名和郵箱地址。

$ git config --global user.name 'runoob' $ git config --global user.email test@runoob.com

接下來我們寫入緩存,并提交對 hello.php 的所有改動。在首個例子中,我們使用 -m 選項以在命令行中提供提交注釋。

$ git add hello.php $ git status -s A README A hello.php $ git commit -m '第一次版本提交' [master (root-commit) d32cf1f] 第一次版本提交2 files changed, 4 insertions(+)create mode 100644 READMEcreate mode 100644 hello.php

現在我們已經記錄了快照。如果我們再執行 git status:

$ git status # On branch master nothing to commit (working directory clean)

以上輸出說明我們在最近一次提交之后,沒有做任何改動,是一個"working directory clean:干凈的工作目錄"。

如果你沒有設置 -m 選項,Git 會嘗試為你打開一個編輯器以填寫提交信息。 如果 Git 在你對它的配置中找不到相關信息,默認會打開 vim。屏幕會像這樣:

# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: hello.php # ~ ~ ".git/COMMIT_EDITMSG" 9L, 257C

如果你覺得 git add 提交緩存的流程太過繁瑣,Git 也允許你用 -a 選項跳過這一步。命令格式如下:

git commit -a

我們先修改 hello.php 文件為以下內容:

<?php echo '菜鳥教程:www.runoob.com'; echo '菜鳥教程:www.runoob.com'; ?>

再執行以下命令:

git commit -am '修改 hello.php 文件' [master 71ee2cb] 修改 hello.php 文件1 file changed, 1 insertion(+)

git reset HEAD

git reset HEAD 命令用于取消已緩存的內容。

我們先改動文件 README 文件,內容如下:

# Runoob Git 測試 # 菜鳥教程

hello.php 文件修改為:

<?php echo '菜鳥教程:www.runoob.com'; echo '菜鳥教程:www.runoob.com'; echo '菜鳥教程:www.runoob.com'; ?>

現在兩個文件修改后,都提交到了緩存區,我們現在要取消其中一個的緩存,操作如下:

$ git status -sM READMEM hello.php $ git add . $ git status -s M README M hello.php $ git reset HEAD hello.php Unstaged changes after reset: M????hello.php $ git status -s M READMEM hello.php

現在你執行 git commit,只會將 README 文件的改動提交,而 hello.php 是沒有的。

$ git commit -m '修改' [master f50cfda] 修改1 file changed, 1 insertion(+) $ git status -sM hello.php

可以看到 hello.php 文件的修改并未提交。

這時我們可以使用以下命令將 hello.php 的修改提交:

$ git commit -am '修改 hello.php 文件' [master 760f74d] 修改 hello.php 文件1 file changed, 1 insertion(+) $ git status On branch master nothing to commit, working directory clean

簡而言之,執行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的緩存。

git rm

如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 Changes not staged for commit 的提示。

要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除,然后提交。可以用以下命令完成此項工作

git rm <file>

如果刪除之前修改過并且已經放到暫存區域的話,則必須要用強制刪除選項 -f

git rm -f <file>

如果把文件從暫存區域移除,但仍然希望保留在當前工作目錄中,換句話說,僅是從跟蹤清單中刪除,使用 --cached 選項即可

git rm --cached <file>

如我們刪除 hello.php文件:

$ git rm hello.php rm 'hello.php' $ ls README

不從工作區中刪除文件:

$ git rm --cached README rm 'README' $ ls README

可以遞歸刪除,即如果后面跟的是一個目錄做為參數,則會遞歸刪除整個目錄中的所有子目錄和文件:

git rm –r *

進入某個目錄中,執行此語句,會刪除該目錄下的所有文件和子目錄。

git mv

git mv 命令用于移動或重命名一個文件、目錄、軟連接。

我們先把剛移除的 README 添加回來:

$ git add README

然后對其重名:

$ git mv README README.md $ ls README.md

?

?

Git 分支管理

?

幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味著你可以從開發主線上分離開來,然后在不影響主線的同時繼續工作。

有人把 Git 的分支模型稱為必殺技特性,而正是因為它,將 Git 從版本控制系統家族里區分出來。

創建分支命令:

git branch (branchname)

切換分支命令:

git checkout (branchname)

當你切換分支的時候,Git 會用該分支的最后提交的快照替換你的工作目錄的內容, 所以多個分支不需要多個目錄。

合并分支命令:

git merge

你可以多次合并到統一分支, 也可以選擇在合并之后直接刪除被并入的分支。

開始前我們先創建一個測試目錄:

$ mkdir gitdemo $ cd gitdemo/ $ git init Initialized empty Git repository... $ touch README $ git add README $ git commit -m '第一次版本提交' [master (root-commit) 3b58100] 第一次版本提交1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 README

Git 分支管理

列出分支

列出分支基本命令:

git branch

沒有參數時,git branch 會列出你在本地的分支。

$ git branch * master

此例的意思就是,我們有一個叫做 master 的分支,并且該分支是當前分支。

當你執行 git init 的時候,缺省情況下 Git 就會為你創建 master 分支。

如果我們要手動創建一個分支。執行 git branch (branchname) 即可。

$ git branch testing $ git branch * mastertesting

現在我們可以看到,有了一個新分支 testing

當你以此方式在上次提交更新之后創建了新分支,如果后來又有更新提交, 然后又切換到了 testing 分支,Git 將還原你的工作目錄到你創建分支時候的樣子。

接下來我們將演示如何切換分支,我們用 git checkout (branch) 切換到我們要修改的分支。

$ ls README $ echo 'runoob.com' > test.txt $ git add . $ git commit -m 'add test.txt' [master 3e92c19] add test.txt1 file changed, 1 insertion(+)create mode 100644 test.txt $ ls README????????test.txt $ git checkout testing Switched to branch 'testing' $ ls README

當我們切換到 testing 分支的時候,我們添加的新文件 test.txt 被移除了。切換回 master 分支的時候,它們有重新出現了。

$ git checkout master Switched to branch 'master' $ ls README????????test.txt

我們也可以使用 git checkout -b (branchname) 命令來創建新分支并立即切換到該分支下,從而在該分支中操作。

$ git checkout -b newtest Switched to a new branch 'newtest' $ git rm test.txt rm 'test.txt' $ ls README $ touch hello.php $ git add . $ git commit -am 'removed test.txt、add runoob.php' [newtest c1501a2] removed test.txt、add runoob.php2 files changed, 1 deletion(-)create mode 100644 runoob.phpdelete mode 100644 test.txt $ ls README????????runoob.php $ git checkout master Switched to branch 'master' $ ls README????????test.txt

如你所見,我們創建了一個分支,在該分支的上移除了一些文件 test.txt,并添加了 runoob.php 文件,然后切換回我們的主分支,刪除的 test.txt 文件又回來了,且新增加的 runoob.php 不存在主分支中。

使用分支將工作切分開來,從而讓我們能夠在不同開發環境中做事,并來回切換。

刪除分支

刪除分支命令:

git branch -d (branchname)

例如我們要刪除 testing 分支:

$ git branch * mastertesting $ git branch -d testing Deleted branch testing (was 85fc7e7). $ git branch * master

分支合并

一旦某分支有了獨立內容,你終究會希望將它合并回到你的主分支。 你可以使用以下命令將任何分支合并到當前分支中去:

git merge $ git branch * masternewtest $ ls README????????test.txt $ git merge newtest Updating 3e92c19..c1501a2 Fast-forwardrunoob.php | 0test.txt | 1 -2 files changed, 1 deletion(-)create mode 100644 runoob.phpdelete mode 100644 test.txt $ ls README????????runoob.php

以上實例中我們將 newtest 分支合并到主分支去,test.txt 文件被刪除。

合并完后就可以刪除分支:

$ git branch -d newtest Deleted branch newtest (was c1501a2).

刪除后, 就只剩下 master 分支了:

$ git branch * master

合并沖突

合并并不僅僅是簡單的文件添加、移除的操作,Git 也會合并修改。

$ git branch * master $ cat runoob.php

首先,我們創建一個叫做 change_site 的分支,切換過去,我們將 runoob.php 內容改為:

<?php echo 'runoob'; ?>

創建 change_site 分支:

$ git checkout -b change_site Switched to a new branch 'change_site' $ vim runoob.php $ head -3 runoob.php <?php echo 'runoob'; ?> $ git commit -am 'changed the runoob.php' [change_site 7774248] changed the runoob.php1 file changed, 3 insertions(+)

將修改的內容提交到 change_site 分支中。 現在,假如切換回 master 分支我們可以看內容恢復到我們修改前的(空文件,沒有代碼),我們再次修改 runoob.php 文件。

$ git checkout master Switched to branch 'master' $ cat runoob.php $ vim runoob.php # 修改內容如下 $ cat runoob.php <?php echo 1; ?> $ git diff diff --git a/runoob.php b/runoob.php index e69de29..ac60739 100644 --- a/runoob.php +++ b/runoob.php @@ -0,0 +1,3 @@ +<?php +echo 1; +?> $ git commit -am '修改代碼' [master c68142b] 修改代碼1 file changed, 3 insertions(+)

現在這些改變已經記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合并過來。

$ git merge change_site Auto-merging runoob.php CONFLICT (content): Merge conflict in runoob.php Automatic merge failed; fix conflicts and then commit the result.$ cat runoob.php # 代開文件,看到沖突內容 <?php <<<<<<< HEAD echo 1; ======= echo 'runoob'; >>>>>>> change_site ?>

我們將前一個分支合并到 master 分支,一個合并沖突就出現了,接下來我們需要手動去修改它。

$ vim runoob.php $ cat runoob.php <?php echo 1; echo 'runoob'; ?> $ git diff diff --cc runoob.php index ac60739,b63d7d7..0000000 --- a/runoob.php +++ b/runoob.php @@@ -1,3 -1,3 +1,4 @@@<?php+echo 1; + echo 'runoob';?>

在 Git 中,我們可以用 git add 要告訴 Git 文件沖突已經解決

$ git status -s UU runoob.php $ git add runoob.php $ git status -s M runoob.php $ git commit [master 88afe0e] Merge branch 'change_site'

現在我們成功解決了合并中的沖突,并提交了結果。

?

Git 查看提交歷史

在使用 Git 提交了若干更新之后,又或者克隆了某個項目,想回顧下提交歷史,我們可以使用 git log 命令查看。

針對我們前一章節的操作,使用 git log 命令列出歷史提交記錄如下:

$ git log commit d5e9fc2c811e0ca2b2d28506ef7dc14171a207d9 (HEAD -> master) Merge: c68142b 7774248 Author: runoob <test@runoob.com> Date: Fri May 3 15:55:58 2019 +0800Merge branch 'change_site'commit c68142b562c260c3071754623b08e2657b4c6d5b Author: runoob <test@runoob.com> Date: Fri May 3 15:52:12 2019 +0800修改代碼commit 777424832e714cf65d3be79b50a4717aea51ab69 (change_site) Author: runoob <test@runoob.com> Date: Fri May 3 15:49:26 2019 +0800changed the runoob.phpcommit c1501a244676ff55e7cccac1ecac0e18cbf6cb00 Author: runoob <test@runoob.com> Date: Fri May 3 15:35:32 2019 +0800

我們可以用 --oneline 選項來查看歷史記錄的簡潔的版本。

$ git log --oneline $ git log --oneline d5e9fc2 (HEAD -> master) Merge branch 'change_site' c68142b 修改代碼 7774248 (change_site) changed the runoob.php c1501a2 removed test.txt、add runoob.php 3e92c19 add test.txt 3b58100 第一次版本提交

這告訴我們的是,此項目的開發歷史。

我們還可以用 --graph 選項,查看歷史中什么時候出現了分支、合并。以下為相同的命令,開啟了拓撲圖選項:

* d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代碼 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 第一次版本提交

現在我們可以更清楚明了地看到何時工作分叉、又何時歸并。

你也可以用 --reverse 參數來逆向顯示所有日志。

$ git log --reverse --oneline 3b58100 第一次版本提交 3e92c19 add test.txt c1501a2 removed test.txt、add runoob.php 7774248 (change_site) changed the runoob.php c68142b 修改代碼 d5e9fc2 (HEAD -> master) Merge branch 'change_site'

如果只想查找指定用戶的提交日志可以使用命令:git log --author , 例如,比方說我們要找 Git 源碼中 Linus 提交的部分:

$ git log --author=Linus --oneline -5 81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory 3bb7256 make "index-pack" a built-in 377d027 make "git pack-redundant" a built-in b532581 make "git unpack-file" a built-in 112dd51 make "mktag" a built-in

如果你要指定日期,可以執行幾個選項:--since 和 --before,但是你也可以用 --until 和 --after。

例如,如果我要看 Git 項目中三周前且在四月十八日之后的所有提交,我可以執行這個(我還用了 --no-merges 選項以隱藏合并提交):

$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges 5469e2d Git 1.7.1-rc2 d43427d Documentation/remote-helpers: Fix typos and improve language 272a36b Fixup: Second argument may be any arbitrary string b6c8d2d Documentation/remote-helpers: Add invocation section 5ce4f4e Documentation/urls: Rewrite to accomodate transport::address 00b84e9 Documentation/remote-helpers: Rewrite description 03aa87e Documentation: Describe other situations where -z affects git diff 77bc694 rebase-interactive: silence warning when no commits rewritten 636db2c t3301: add tests to use --format="%N"

?

Git 標簽

如果你達到一個重要的階段,并希望永遠記住那個特別的提交快照,你可以使用 git tag 給它打上標簽。

比如說,我們想為我們的 runoob 項目發布一個"1.0"版本。 我們可以用 git tag -a v1.0 命令給最新一次提交打上(HEAD)"v1.0"的標簽。

-a 選項意為"創建一個帶注解的標簽"。 不用 -a 選項也可以執行的,但它不會記錄這標簽是啥時候打的,誰打的,也不會讓你添加個標簽的注解。 我推薦一直創建帶注解的標簽。

$ git tag -a v1.0

當你執行 git tag -a 命令時,Git 會打開你的編輯器,讓你寫一句標簽注解,就像你給提交寫注解一樣。

現在,注意當我們執行 git log --decorate 時,我們可以看到我們的標簽了:

* d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代碼 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 第一次版本提交

如果我們忘了給某個提交打標簽,又將它發布了,我們可以給它追加標簽。

例如,假設我們發布了提交 85fc7e7(上面實例最后一行),但是那時候忘了給它打標簽。 我們現在也可以:

$ git tag -a v0.9 85fc7e7 $ git log --oneline --decorate --graph * d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代碼 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 (tag: v0.9) 第一次版本提交

如果我們要查看所有標簽可以使用以下命令:

$ git tag v0.9 v1.0

指定標簽信息命令:

git tag -a <tagname> -m "runoob.com標簽"

PGP簽名標簽命令:

git tag -s <tagname> -m "runoob.com標簽"

?

Git 遠程倉庫(Github)

Git 并不像 SVN 那樣有個中心服務器。

目前我們使用到的 Git 命令都是在本地執行,如果你想通過 Git 分享你的代碼或者與其他開發人員合作。 你就需要將數據放到一臺其他開發人員能夠連接的服務器上。

本例使用了 Github 作為遠程倉庫,你可以先閱讀我們的 Github 簡明教程。


添加遠程庫

要添加一個新的遠程倉庫,可以指定一個簡單的名字,以便將來引用,命令格式如下:

git remote add [shortname] [url]

本例以 Github 為例作為遠程倉庫,如果你沒有 Github 可以在官網 https://github.com/注冊。

?

由于你的本地 Git 倉庫和 GitHub 倉庫之間的傳輸是通過SSH加密的,所以我們需要配置驗證信息:

使用以下命令生成 SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

后面的 your_email@youremail.com 改為你在 Github 上注冊的郵箱,之后會要求確認路徑和輸入密碼,我們這使用默認的一路回車就行。成功的話會在 ~/ 下生成 .ssh 文件夾,進去,打開 id_rsa.pub,復制里面的 key

回到 github 上,進入 Account => Settings(賬戶配置)。

左邊選擇 SSH and GPG keys,然后點擊 New SSH key 按鈕,title 設置標題,可以隨便填,粘貼在你電腦上生成的 key。

添加成功后界面如下所示

?

為了驗證是否成功,輸入以下命令:

$ ssh -T git@github.com Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.

以下命令說明我們已成功連上 Github。

之后登錄后點擊" New repository " 如下圖所示:

之后在在Repository name 填入 runoob-git-test(遠程倉庫名) ,其他保持默認設置,點擊"Create repository"按鈕,就成功地創建了一個新的Git倉庫:

創建成功后,顯示如下信息:

以上信息告訴我們可以從這個倉庫克隆出新的倉庫,也可以把本地倉庫的內容推送到GitHub倉庫。

現在,我們根據 GitHub 的提示,在本地的倉庫下運行命令:

$ mkdir runoob-git-test # 創建測試目錄 $ cd runoob-git-test/ # 進入測試目錄 $ echo "# 菜鳥教程 Git 測試" >> README.md # 創建 README.md 文件并寫入內容 $ ls # 查看目錄下的文件 README $ git init # 初始化 $ git add README.md # 添加文件 $ git commit -m "添加 README.md 文件" # 提交并備注信息 [master (root-commit) 0205aab] 添加 README.md 文件1 file changed, 1 insertion(+)create mode 100644 README.md# 提交到 Github $ git remote add origin git@github.com:tianqixin/runoob-git-test.git $ git push -u origin master

以下命令請根據你在Github成功創建新倉庫的地方復制,而不是根據我提供的命令,因為我們的Github用戶名不一樣,倉庫名也不一樣。

接下來我們返回 Github 創建的倉庫,就可以看到文件已上傳到 Github上:


查看當前的遠程庫

要查看當前配置有哪些遠程倉庫,可以用命令:

git remote

實例

$ git remote origin $ git remote -v origin????git@github.com:tianqixin/runoob-git-test.git (fetch) origin????git@github.com:tianqixin/runoob-git-test.git (push)

執行時加上 -v 參數,你還可以看到每個別名的實際鏈接地址。


提取遠程倉庫

Git 有兩個命令用來提取遠程倉庫的更新。

1、從遠程倉庫下載新分支與數據:

git fetch

該命令執行完后需要執行git merge 遠程分支到你所在的分支。

2、從遠端倉庫提取數據并嘗試合并到當前分支:

git merge

該命令就是在執行 git fetch 之后緊接著執行 git merge 遠程分支到你所在的任意分支。

假設你配置好了一個遠程倉庫,并且你想要提取更新的數據,你可以首先執行 git fetch [alias] 告訴 Git 去獲取它有你沒有的數據,然后你可以執行 git merge [alias]/[branch] 以將服務器上的任何更新(假設有人這時候推送到服務器了)合并到你的當前分支。

接下來我們在 Github 上點擊" README.md" 并在線修改它:

然后我們在本地更新修改。

$ git fetch origin remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From github.com:tianqixin/runoob-git-test0205aab..febd8ed master -> origin/master

以上信息"0205aab..febd8ed master -> origin/master" 說明 master 分支已被更新,我們可以使用以下命令將更新同步到本地:

$ git merge origin/master Updating 0205aab..febd8ed Fast-forwardREADME.md | 1 +1 file changed, 1 insertion(+)

查看 README.md 文件內容:

$ cat README.md # 菜鳥教程 Git 測試 ## 第一次修改內容

推送到遠程倉庫

推送你的新分支與數據到某個遠端倉庫命令:

git push [alias] [branch]

以上命令將你的 [branch] 分支推送成為 [alias] 遠程倉庫上的 [branch] 分支,實例如下。

$ touch runoob-test.txt # 添加文件 $ git add runoob-test.txt $ git commit -m "添加到遠程" master 69e702d] 添加到遠程1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 runoob-test.txt$ git push origin master # 推送到 Github

重新回到我們的 Github 倉庫,可以看到文件以及提交上來了:


刪除遠程倉庫

刪除遠程倉庫你可以使用命令:

git remote rm [別名]

實例

$ git remote -v origin????git@github.com:tianqixin/runoob-git-test.git (fetch) origin????git@github.com:tianqixin/runoob-git-test.git (push)# 添加倉庫 origin2 $ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git$ git remote -v origin????git@github.com:tianqixin/runoob-git-test.git (fetch) origin????git@github.com:tianqixin/runoob-git-test.git (push) origin2????git@github.com:tianqixin/runoob-git-test.git (fetch) origin2????git@github.com:tianqixin/runoob-git-test.git (push)# 刪除倉庫 origin2 $ git remote rm origin2 $ git remote -v origin????git@github.com:tianqixin/runoob-git-test.git (fetch) origin????git@github.com:tianqixin/runoob-git-test.git (push)

使用 CODING 倉庫

對于開發者而言 GitHub 已經不陌生了,在平時的開發中將代碼托管到 GitHub 上十分方便。但是、國內用戶通常會遇到一個問題就是: GitHub 的訪問速度太慢。在阿里云和騰訊云的主機上 clone 代碼時,如果主機的帶寬不夠大,clone 代碼簡直就是龜速。常常還會出現:丟包、失去連接等情況。對于這種情況,如果你想體驗飛速的 Git 服務,不妨試著用一下 騰訊云開發者平臺。相對于GitHub,CODING 除了提供免費的 Git 倉庫之外,還給我們提供了免費的私有倉庫(免費的普通會員提供 10 個私有項目、512M Git 倉庫容量)。此外、CODING 還為我們免費提供了,項目管理、任務管理、團隊管理、文件管理等功能,十分強大。

下面,我是試著來創建一個 CODING 項目,并且將 GitHub 上的代碼遷移到 CODING。通常,分為三步:

  • 1、創建 CODING 項目
  • 2、將 GitHub 代碼 Pull 到本地
  • 3、本地關聯 CODING 倉庫,Push 代碼到 CODING

創建 CODING 項目:

登錄 騰訊云開發者平臺 注冊賬號,然后在項目管理頁面中創建項目,這一步不做贅述,按你的需要填寫項目名稱與描述,選擇 License 類型即可,關于 License 的選擇可以參考這篇文章:如何選擇開源許可證?。項目創建完成中,在右側菜單欄中的代碼選項卡可以對代碼進行相關的管理與操作

將 GitHub 代碼 Pull 到本地:

登錄 GitHub 選擇你想要導入的倉庫并復制倉庫地址,在本地執行命令,將 GitHub 倉庫代碼拉下來:

sudo git clone

本地關聯 CODING 倉庫,Push 代碼到 CODING:

首先我們執行命令:git remote -v

可以看到,當前的 git 已經關聯了一個遠程倉庫。

因此,接下來我們執行以下命令,來關聯 CODING 遠程倉庫(后面的倉庫地址需要替換為你的 CODING 項目的地址!) 第一條命令的作用是刪除現有的倉庫關聯,后面兩條命令則是將倉庫關聯到 CODING 的地址,并且將代碼 Push 到 master 分支

sudo git remote rm origin sudo git remote add origin https://git.coding.net/xxx/xxx.git sudo git push -u origin master

之后,我們再次進入 CODING 項目中代碼管理的頁面,便可以看到我們剛才 Push 上去的代碼了。至此、GitHub 上的項目已經完整遷移到了 CODING 平臺!

CODING 倉庫的免密碼 Push/Pull

代碼遷移到 CODING 之后,我們發現,每次 Push/Pull 代碼的時候都會提示我們輸入用戶名和密碼。這是因為,我們的項目還沒有添加 SSH Key,只能通過用戶名/密碼驗證。 而 CODING 是為我們提供了公鑰驗證的方式的,進入項目管理,在左側選項卡中點擊"公鑰部署"按鈕,然后點擊右側的"新建公鑰部署"

我們將本地的公鑰內容粘貼到對應位置,并且給公鑰命名一下(查看/生成本機公鑰,可以參考這篇博文:查看本機 ssh 公鑰,生成公鑰)。勾選"授予推送權限"則可以授予這臺機器Push代碼的權限。

保存好設置后,我們再次嘗試。此時,Push/Pull 代碼不在需要驗證用戶名密碼。至此,我們的代碼便完全托管在了 CODING 平臺上,享受他的便捷與飛速吧!

如有疑問請查閱幫助文檔

現在 CODING 正在舉辦一場基于 Cloud Studio 工作空間的【我最喜愛的 Cloud Studio 插件評選大賽】。進入活動官網:https://studio.qcloud.coding.net/campaign/favorite-plugins/index,了解更多活動信息。

?

?

Git 服務器搭建

Git 服務器搭建

上一章節中我們遠程倉庫使用了 Github,Github 公開的項目是免費的,但是如果你不想讓其他人看到你的項目就需要收費。

這時我們就需要自己搭建一臺Git服務器作為私有倉庫使用。

接下來我們將以 Centos 為例搭建 Git 服務器。

1、安裝Git

$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel $ yum install git

接下來我們 創建一個git用戶組和用戶,用來運行git服務:

$ groupadd git $ useradd git -g git

2、創建證書登錄

收集所有需要登錄的用戶的公鑰,公鑰位于id_rsa.pub文件中,把我們的公鑰導入到/home/git/.ssh/authorized_keys文件里,一行一個。

如果沒有該文件創建它:

$ cd /home/git/ $ mkdir .ssh $ chmod 755 .ssh $ touch .ssh/authorized_keys $ chmod 644 .ssh/authorized_keys

?

3、初始化Git倉庫

首先我們選定一個目錄作為Git倉庫,假定是/home/gitrepo/runoob.git,在/home/gitrepo目錄下輸入命令:

$ cd /home $ mkdir gitrepo $ chown git:git gitrepo/ $ cd gitrepo$ git init --bare runoob.git Initialized empty Git repository in /home/gitrepo/runoob.git/

以上命令Git創建一個空倉庫,服務器上的Git倉庫通常都以.git結尾。然后,把倉庫所屬用戶改為git:

$ chown -R git:git runoob.git

4、克隆倉庫

$ git clone git@192.168.45.4:/home/gitrepo/runoob.git Cloning into 'runoob'... warning: You appear to have cloned an empty repository. Checking connectivity... done.

192.168.45.4 為 Git 所在服務器 ip ,你需要將其修改為你自己的 Git 服務 ip。

這樣我們的 Git 服務器安裝就完成。

?

常用命令

  • git status
  • git remote
  • git clone git@xxx.com
  • git init
  • git remote add origin git@git.oschina.net:gupaoedu_com_vip/test10.git
  • git push -u origin master
  • git pull
  • git push
  • git checkout
  • git merge
  • git rebase
  • git tag 版本

?

經常幫人配置git的私鑰,來總結一下簡單的流程真心希望對大家有所幫助。

1.本地安裝好git;

2.桌面右鍵 Git Bash Here 打開git命令行;

3.ssh-keygen -t rsa -C "nideyouxiang@xxx.com"???(全部按enter);

4.cd ~/.ssh???(如果沒有執行第三步,則不會有這個文件夾);

5.cat?id_rsa.pub?????在命令行打開這個文件,會直接輸出密鑰;

6.復制,打開github???,點自己頭像 >> settings >> SSH and GPG keys >>New SSH key?

7. titile??隨便寫。??key里????粘貼第六步的內容;完成。
?

轉載于:https://my.oschina.net/zz006/blog/3054331

總結

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

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

欧美久久久久久久久久久久久 | 久久久久国产成人免费精品免费 | 99免费在线播放99久久免费 | 亚洲天堂色婷婷 | 五月天中文字幕mv在线 | 综合激情久久 | 中文字幕久久精品一区 | 黄色片网站 | 亚洲视频综合在线 | 视频一区二区国产 | 久久精品二区 | 91理论电影 | 欧美大片在线观看一区 | 婷婷丁香狠狠爱 | 精品久久久久久综合日本 | 日韩av资源在线观看 | 欧美激情精品久久久 | 精品国产一区二区三区四区vr | 在线精品视频在线观看高清 | 毛片无卡免费无播放器 | 婷婷精品国产一区二区三区日韩 | 欧美福利视频一区 | 最新av在线免费观看 | 一区二区视频免费在线观看 | 成人黄色免费在线观看 | 偷拍福利视频一区二区三区 | 欧美另类老妇 | 久久综合色播五月 | 亚洲国产视频在线 | 日本久久久影视 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 天天搞天天 | 最近中文字幕久久 | 91精品国产乱码久久桃 | 黄色av电影在线 | 亚洲aaa毛片 | 色综合色综合久久综合频道88 | 亚洲精品欧美成人 | 男女精品久久 | 久久九九国产视频 | 色综合五月 | 欧美日韩电影在线播放 | 国产精品露脸在线 | 麻豆视频免费在线播放 | 久久亚洲电影 | 青青河边草免费观看完整版高清 | 91在线网址 | 人人精品久久 | 免费精品人在线二线三线 | 91日韩在线视频 | 99久久超碰中文字幕伊人 | 人人狠狠综合久久亚洲 | 久久久久成人精品 | 又黄又刺激的视频 | 超碰在线94 | 色综合天天色综合 | 亚洲午夜精品电影 | 在线观看一 | www国产亚洲精品久久网站 | 夜夜摸夜夜爽 | 日本精品一区二区在线观看 | 久久久精品成人 | 亚洲综合视频在线观看 | 日日夜夜狠狠 | 欧美一级在线观看视频 | 亚洲精品在线电影 | 亚洲激精日韩激精欧美精品 | 麻豆视频成人 | 精品美女在线观看 | 国产精品美女久久久 | 国产精品久久久久久一区二区三区 | 日韩av午夜 | av大片免费在线观看 | 国产青春久久久国产毛片 | 中文字幕久久久精品 | 日本精品久久久一区二区三区 | 摸阴视频 | 中文乱幕日产无线码1区 | 国产成人三级一区二区在线观看一 | 久久久久久久久久国产精品 | 亚洲精品国产区 | 少妇视频一区 | 国产精品一区二区三区免费视频 | 中文字幕在线看视频国产中文版 | 亚洲国产97在线精品一区 | 日日碰狠狠添天天爽超碰97久久 | 黄色资源在线观看 | 中文字幕第一页在线播放 | 日韩国产欧美在线视频 | 精品国产伦一区二区三区 | 不卡av免费在线观看 | av先锋中文字幕 | 久久经典视频 | 国产一级免费在线观看 | www.超碰97.com| 国产原创av在线 | 久久影视网 | 国产特级毛片aaaaaa | 日韩精品中文字幕久久臀 | 伊人国产女 | 久草在线91 | 免费网站黄 | 91精品久久久久久综合乱菊 | 国产婷婷视频在线 | 麻豆视传媒官网免费观看 | 国产精品theporn | 综合精品在线 | 2022久久国产露脸精品国产 | 久久成人综合 | 天天看天天干天天操 | 成年人免费看 | 成人app在线免费观看 | 国产精品亚州 | 中文字幕在线看视频国产中文版 | 亚洲激情视频在线观看 | 狠狠亚洲 | 九九视频在线播放 | 成人国产精品免费观看 | 高清在线一区 | 国产一区二区精品在线 | 五月av在线 | 精品视频亚洲 | 人人看看人人 | 欧美一区三区四区 | 欧美日韩精品二区第二页 | 91精品一区国产高清在线gif | 成人亚洲免费 | 久久精品第一页 | 久久视频网址 | 福利视频一区二区 | 色99之美女主播在线视频 | 免费看黄的视频 | 亚洲黄色免费观看 | 在线91网| 超碰资源在线 | 欧美伦理一区 | 国产高清一 | 五月天婷婷视频 | 国产视频亚洲视频 | 一区二区三区免费在线观看视频 | 午夜视频福利 | 中文字幕 在线 一 二 | 亚洲成色 | 粉嫩av一区二区三区免费 | 国产69精品久久99不卡的观看体验 | 日韩在线视频国产 | 国产精品一区专区欧美日韩 | 视频一区二区免费 | 精品视频成人 | 免费久久久久久久 | 久久久福利 | av在线com | 91女子私密保健养生少妇 | 久久久久电影 | 欧洲一区二区三区精品 | 久久久久网址 | 国产精品久久久久av福利动漫 | 久久超碰免费 | 99热在线这里只有精品 | 极品久久久久 | 久久成人精品电影 | av免费在线免费观看 | 亚洲精品黄色在线观看 | 亚洲精品国产精品国自产 | 97电影网手机版 | 韩国av免费观看 | 天天看天天干 | 久久久久看片 | 日韩av高潮| av在线播放免费 | 天堂网一区 | 在线只有精品 | 91精品毛片 | 久久国产精品免费视频 | 国产精品欧美久久久久无广告 | 亚洲一区二区三区毛片 | 久久精品网站免费观看 | 日日激情 | 日韩sese| 久久久影院一区二区三区 | 五月婷婷一级片 | 亚洲午夜久久久久久久久电影网 | 国产专区视频在线观看 | 国产精品免费久久久 | 亚洲视频精品 | 国产三级在线播放 | 日韩理论片在线观看 | 中文字幕精品一区 | 97av在线视频 | 国产精品久久久一区二区 | 亚洲无人区小视频 | 国产一区二区免费在线观看 | 91完整版 | 亚洲蜜桃在线 | 久草电影网 | 干狠狠| 欧美精品天堂 | 日韩精品资源 | 国产视频二| 91黄色免费网站 | 91精品视频免费在线观看 | 欧美中文字幕久久 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲欧美视频在线 | 亚洲第一伊人 | 日韩高清黄色 | 国产很黄很色的视频 | 亚洲美女免费精品视频在线观看 | 亚洲黄色成人 | 久久久精品成人 | 国产亚洲va综合人人澡精品 | 亚洲精品在线观看不卡 | 精品国产伦一区二区三区观看体验 | 色在线亚洲 | 日本中文字幕观看 | 国产成人一区二区三区在线观看 | 欧美午夜a| 99久久精品午夜一区二区小说 | 欧美小视频在线 | 久久不卡国产精品一区二区 | 四虎永久国产精品 | 日本动漫做毛片一区二区 | 国产一区二区成人 | 欧美九九九 | 91男人影院 | 国产欧美中文字幕 | 色综合久久悠悠 | 麻豆传媒精品 | 久久久久欧美精品 | 欧美专区亚洲专区 | 久青草视频在线观看 | 国产免费作爱视频 | 91在线91拍拍在线91 | 亚洲成人第一区 | 99超碰在线观看 | 人人舔人人舔 | 国产理论影院 | 国产成人久久精品一区二区三区 | 人人看人人草 | 亚洲精品88欧美一区二区 | 欧美精品在线观看一区 | 成人久久久久久久久久 | 蜜桃视频在线观看一区 | 国产色综合 | www.黄色| 97爱| 黄色国产大片 | 国产日产av| 天天干天天干天天操 | 懂色av一区二区在线播放 | 国产一区二区三区在线免费观看 | 天堂网中文在线 | 看全黄大色黄大片 | 五月天中文字幕mv在线 | 国产精品久久久久久麻豆一区 | 久久免费视频在线观看 | 欧美一区二视频在线免费观看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 国产精品11 | 色综合久久久久久久久五月 | av成人免费 | 亚洲综合欧美激情 | 激情中文在线 | 精品一区二区影视 | 麻豆国产精品永久免费视频 | 黄色中文字幕 | 国产精品18久久久久vr手机版特色 | 99精品一区二区三区 | 在线精品视频在线观看高清 | 99夜色 | 91av资源网 | 五月婷婷视频在线观看 | 在线中文字幕一区二区 | 视频一区二区免费 | 91在线九色 | 日韩午夜在线 | 久久综合丁香 | av成人动漫在线观看 | 狠狠干狠狠艹 | 久久xx视频| 国产成人精品午夜在线播放 | 精品在线观| 免费在线视频一区二区 | 亚洲精品人人 | 爱色av.com| 久久综合五月天婷婷伊人 | www欧美色 | 亚洲少妇激情 | 人人澡超碰碰97碰碰碰软件 | 亚洲视频综合 | 91成人精品| 国产精品久久久久影视 | 婷婷色中文网 | 九九综合在线 | 久久夜靖品 | 久99久中文字幕在线 | 最新亚洲视频 | 国产精品久久久久久一区二区三区 | 亚洲精品裸体 | 欧美天堂影院 | 亚洲欧美乱综合图片区小说区 | 欧美日韩中文字幕视频 | 日韩毛片在线免费观看 | 国产精品永久免费观看 | 久久久免费看片 | 中文欧美字幕免费 | 亚洲va韩国va欧美va精四季 | 天天看天天干 | 91成人天堂久久成人 | 久久艹精品 | 色综合久久88色综合天天 | 九九热国产视频 | 成人中心免费视频 | 五月天激情在线 | 亚洲精品乱码久久久久v最新版 | 欧美三人交| 国产精品视频区 | 三级黄色免费片 | 在线观看亚洲专区 | 婷婷综合成人 | 日韩精品免费专区 | 99久久久久久国产精品 | 免费视频资源 | 麻豆高清免费国产一区 | 波多野结衣视频在线 | 国产精品久久久久高潮 | 丝袜网站在线观看 | 最近中文字幕免费av | 日韩欧美一区二区三区免费观看 | 日韩高清av在线 | 久久精品免费播放 | 日韩欧美亚州 | 九九视频免费在线观看 | 狠狠操影视 | 人人玩人人爽 | 日韩黄色软件 | 欧美在线a视频 | 91在线视频免费 | 91色视频| 欧美精品久久久 | 97精品国产91久久久久久久 | 亚洲三级在线 | 午夜精品视频一区二区三区在线看 | 超碰公开在线观看 | 天干啦夜天干天干在线线 | 狠狠色噜噜狠狠狠狠2021天天 | 亚洲欧美日韩在线看 | 激情综合五月网 | 国产一区二区在线播放视频 | 色婷婷狠狠操 | 国产精品一区二区果冻传媒 | 久艹视频在线观看 | 色全色在线资源网 | 亚洲一区视频免费观看 | 伊人日日干 | 四虎影视成人永久免费观看视频 | 亚洲精品五月 | 欧美日韩视频一区二区三区 | 国产成人精品午夜在线播放 | 欧美久草在线 | 三级在线视频观看 | 国产精品国产三级国产 | 永久免费看av| 97香蕉超级碰碰久久免费软件 | 国产精品网站一区二区三区 | 久久免费国产精品1 | 国产精品视频专区 | 日韩一区在线免费观看 | 欧美精品小视频 | 天天射狠狠干 | 亚洲精品国偷拍自产在线观看蜜桃 | 免费久久网 | 日日摸日日添日日躁av | 狠狠撸电影 | 99精品在线免费在线观看 | 91在线视频精品 | 色综合久久久久久久久五月 | 一本一本久久a久久精品综合 | 激情综合五月婷婷 | 久久久久欧美精品999 | 欧美精品免费在线观看 | 日韩激情小视频 | 天天综合久久 | 九草在线视频 | 国产小视频在线观看 | 超碰999 | 天天操天天操天天操天天 | 国产精品美乳一区二区免费 | 国产成人在线精品 | 日韩av片免费在线观看 | 欧美少妇18p | 欧美日本三级 | 亚洲va欧美va人人爽春色影视 | 天堂av免费看 | 国精产品999国精产 久久久久 | 中文av一区二区 | 中文字幕在线观看完整版电影 | 在线视频日韩一区 | 日日草av| 韩国精品视频在线观看 | 五月天丁香亚洲 | 日本xxxx.com | 精品久久国产一区 | 在线观看香蕉视频 | 麻豆免费精品视频 | 久久久久亚洲精品 | 亚洲久在线 | 爱爱av网| 在线精品视频免费播放 | 亚洲影视资源 | 91av精品 | 久久久久免费精品国产小说色大师 | 日韩欧美电影在线 | 在线视频专区 | 中文字幕免费在线 | 成人在线超碰 | 国产成人精品久久久久 | 国产精品久久久久久久久久免费 | 日韩www在线| 性色va| 午夜电影av | 欧美不卡视频在线 | 色播五月婷婷 | 99精品网站| 精品一区 精品二区 | 麻豆观看 | 天天爱天天操 | 国产亚洲精品xxoo | 波多野结衣精品视频 | 欧美日韩a视频 | 国产日韩欧美在线观看视频 | 亚洲一区欧美激情 | 国产69精品久久久久9999apgf | 干干日日 | 永久黄网站色视频免费观看w | 国产一区免费 | 美腿丝袜一区二区三区 | 欧美一区二区在线 | 园产精品久久久久久久7电影 | 午夜精品视频一区二区三区在线看 | 毛片www| 久久精品艹 | 欧美精选一区二区三区 | 久久精品激情 | 中文字幕制服丝袜av久久 | 国产日韩高清在线 | 国产精品激情 | 国产一级久久 | 精品久久久久久久久久岛国gif | 欧美日韩高清一区 | 欧美综合在线观看 | 蜜桃av综合网 | 在线观看av的网站 | 日韩av成人在线观看 | 亚洲另类人人澡 | 日韩特级片 | 99精品一区二区三区 | 久久撸在线视频 | 午夜在线观看一区 | 中文字幕乱码电影 | 亚洲精品国产日韩 | 亚洲国产精品999 | 天天天天射 | 黄色在线免费观看网址 | 在线观看免费国产小视频 | 成人啪啪18免费游戏链接 | 五月天狠狠操 | 欧美精品久久久久久久久久 | 欧美激情在线网站 | 亚洲精品www久久久久久 | 揉bbb玩bbb少妇bbb | 麻豆精品国产传媒 | 国产成人三级三级三级97 | 婷婷丁香国产 | 精品无人国产偷自产在线 | 亚洲免费av片 | 四虎最新域名 | 欧美韩国日本在线 | 国产亚洲精品久久久久久大师 | 国产精品成人免费精品自在线观看 | 麻豆系列在线观看 | 美女精品 | 欧洲性视频| 狠狠躁18三区二区一区ai明星 | 色婷婷五| av片中文| 天天综合日日夜夜 | 久久免费的精品国产v∧ | 国产精品一区免费观看 | 中文字幕色综合网 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 综合网五月天 | 美女网站在线 | 日日操狠狠干 | 欧美激情第一页xxx 午夜性福利 | 久久激情视频免费观看 | 亚洲综合在线播放 | 久久不卡免费视频 | 久久国产精品第一页 | 色av资源网| 三级黄免费看 | 国产精品久久久久久99 | 99成人在线视频 | 国产小视频在线免费观看 | 97成人在线免费视频 | 国产精品一区二区美女视频免费看 | 日韩电影久久久 | 91自拍91 | 久久 地址 | 成人av电影免费在线播放 | 国产99在线播放 | 亚洲精品午夜一区人人爽 | 亚洲精品在线观看网站 | 日韩一三区 | 亚洲精品小视频在线观看 | 中文字幕在线字幕中文 | 麻豆成人精品视频 | 毛片a级片| 久久国产片| 色婷婷狠狠五月综合天色拍 | 成人在线你懂得 | 国产视频1区2区 | 4hu视频 | 中文字幕永久 | 欧美综合久久久 | 欧美日韩高清在线观看 | 久9在线 | 国产精品一区二区三区观看 | 最新久久久 | 黄色小网站在线 | 久久五月婷婷丁香社区 | 992tv在线观看| 四虎影视精品成人 | 粉嫩av一区二区三区四区在线观看 | 久久久午夜电影 | 五月激情久久久 | 久久综合免费视频 | 精品国产人成亚洲区 | 91在线小视频 | 精品国产电影一区 | 亚洲综合色网站 | 久久视频精品 | 美女网站视频免费都是黄 | 成人黄色大片在线观看 | 狠狠躁日日躁狂躁夜夜躁 | 麻豆mv在线观看 | 国产精品一区二区三区久久久 | 人人爱人人爽 | 亚洲国内精品视频 | 日韩在线国产精品 | 99精品久久精品一区二区 | 国产97碰免费视频 | 色婷婷狠狠 | 四虎在线免费视频 | 亚洲视频国产 | 日日婷婷夜日日天干 | 午夜国产一区二区三区四区 | 国产不卡一区二区视频 | 免费看日韩 | www.亚洲黄色| 水蜜桃亚洲一二三四在线 | 青草视频在线看 | 五月天色中色 | 五月综合激情网 | 在线观看亚洲电影 | 中文字幕字幕中文 | 九九视频免费 | 黄av资源 | 欧美性生交大片免网 | 在线观看久久久久久 | 免费在线播放黄色 | 日韩国产高清在线 | 国内少妇自拍视频一区 | 日韩精品91偷拍在线观看 | 人人草在线观看 | 中文字幕美女免费在线 | 国产色视频| 成人免费在线观看入口 | 中文字幕国产一区 | 欧美亚洲免费在线一区 | 在线黄色国产 | 日本婷婷色 | 国产精品一区二区中文字幕 | 国精产品满18岁在线 | 天天夜操 | 人人草天天草 | 亚洲精品久久在线 | 日韩在线视频免费观看 | 综合久久一本 | 色999五月色 | 午夜精品久久久久99热app | 日韩一二区在线观看 | 国产亚州精品视频 | 色射色 | 日韩av成人免费看 | 久久精品5| 国产精品久久 | 日日夜夜国产 | 国产成人一区二区三区久久精品 | 国产成人精品日本亚洲999 | 色偷偷88888欧美精品久久 | 国产色综合天天综合网 | 国产高清不卡一区二区三区 | 手机在线永久免费观看av片 | 国产黄色片免费在线观看 | 成人国产精品电影 | av一区二区三区在线观看 | 99免费观看视频 | 17videosex性欧美 | 亚洲视频综合 | 激情视频一区二区三区 | 黄色av电影网 | 成人网中文字幕 | 久久草在线视频国产 | 丝袜美女视频网站 | 五月婷婷欧美视频 | 99视频在线免费看 | 国产精品久久久 | 亚洲精品小区久久久久久 | 日韩美av在线 | 欧美另类交人妖 | 国产午夜视频在线观看 | 亚洲成a人片综合在线 | 欧美色图亚洲图片 | 缴情综合网五月天 | 亚洲精品福利在线观看 | 婷婷在线免费 | 午夜黄色影院 | 国产字幕在线观看 | 国产第页 | 狠色在线 | www夜夜| 91精品老司机久久一区啪 | 一区二区不卡视频在线观看 | 国产精品xxxx18a99 | 久一久久 | 中文字幕一区二 | 婷婷丁香花 | 精品视频123区在线观看 | 免费一级片观看 | 天天操天天添天天吹 | 亚洲国产中文字幕在线 | 伊人久久影视 | 久久久久亚洲精品成人网小说 | 日韩久久精品一区二区 | 亚洲国产日本 | 精品人人人人 | 久久九九久久精品 | 午夜精品久久久久久久久久久久久久 | 91日韩国产| 狠狠色丁香久久婷婷综合_中 | 国产精品福利av | 狠狠干夜夜操 | 丁香五月亚洲综合在线 | 国产黄色视 | 精品国产电影一区二区 | 99人久久精品视频最新地址 | 亚洲精品乱码久久久久久蜜桃动漫 | 日韩av伦理片 | 久久在线播放 | 99精品国产高清在线观看 | av丁香| 91福利视频在线 | 欧美一级片免费 | 超碰在线免费福利 | 亚洲天堂色婷婷 | 成 人 黄 色 免费播放 | 精品亚洲在线 | 丝袜制服天堂 | 99色国产| 香蕉影院在线播放 | 久久中文欧美 | 在线精品视频免费播放 | 97成人在线 | 日韩免费看的电影 | 在线免费观看黄色大片 | 久久久久久黄色 | 99精品免费在线观看 | 麻花豆传媒mv在线观看网站 | 中文字幕色在线视频 | 在线观看岛国av | 91精品一区二区三区蜜臀 | 国产高清免费视频 | 黄色最新网址 | 国产精品一区二区在线 | 亚洲国产日韩av | 亚洲成人精品 | 久综合网 | 91久久国产综合精品女同国语 | 婷婷在线免费 | 波多野结衣一区 | 成人av电影在线观看 | 99福利影院| 四虎在线观看精品视频 | 国内精自线一二区永久 | 亚洲国产中文在线 | 国产精品男女视频 | 五月天综合色 | 激情网站五月天 | 欧美色图东方 | 亚洲天堂精品视频 | 日韩欧美国产视频 | 激情开心| a成人在线 | 女人18毛片90分钟 | 国产色a在线观看 | 久久精品视频一 | 免费在线观看av电影 | www.夜夜操| 久久一区91 | 狠狠色网| 久久综合九色99 | 成人三级黄色 | 在线观看网站你懂的 | 日本性生活免费看 | 韩国一区在线 | 国产91精品欧美 | 久久精品视频播放 | 免费在线观看成人av | 久久免费美女视频 | 久久久久中文字幕 | 九精品 | 国产亚洲婷婷 | 91精品国产99久久久久久红楼 | 永久免费在线 | 在线精品亚洲一区二区 | 国产福利91精品一区二区三区 | 四虎国产精品成人免费影视 | 狠狠操天天干 | 高清国产午夜精品久久久久久 | 中文字幕高清av | 久久国产亚洲视频 | 日韩视频免费 | 在线草 | 狠狠色狠狠综合久久 | 精品在线99| 免费日韩一级片 | 91色影院| 一区久久久| 夜夜操天天 | 国产精品毛片一区二区三区 | 91一区二区三区久久久久国产乱 | 日本女人b | 亚洲人成影院在线 | 91精品国产91热久久久做人人 | 高清国产午夜精品久久久久久 | 中文字幕精品三区 | 天天夜夜狠狠操 | 色婷婷狠 | 亚洲国产中文在线观看 | 国产亚洲在线观看 | 国际精品久久久 | 91精品网站在线观看 | 日韩视频一区二区三区 | 亚洲一区二区三区四区精品 | 久久亚洲婷婷 | 一区二区三区播放 | 国产一级黄色片免费看 | 中国精品一区二区 | 91在线一区 | 天天综合色 | 久久久久久久99 | 91综合久久一区二区 | 91精品国产91久久久久福利 | 日日麻批40分钟视频免费观看 | 日韩欧美电影在线 | 日本在线成人 | 天天干天天爽 | 日本精品久久久一区二区三区 | 视频一区亚洲 | 欧美三级免费 | 怡红院av| 日韩美女黄色片 | 久久精品欧美视频 | 久久96| www.国产视频 | av免费观看网址 | 久久久久免费精品视频 | 国产亚洲精品无 | 久久看片网站 | 激情网在线观看 | 久久精品电影网 | 国产精品videossex国产高清 | 天堂va在线高清一区 | 美女在线免费视频 | 成人午夜电影在线观看 | 国产一级一片免费播放放 | 亚洲视频在线看 | 欧美另类xxxxx | 国产精品久久综合 | 96亚洲精品久久 | 91成人午夜| 久久久久久久久网站 | 五月天色综合 | 久久精品一区二区三 | 国产不卡精品 | 久久久久久久国产精品视频 | 婷婷激情网站 | 欧美精品久久久久久久久久白贞 | 成人影片在线免费观看 | av观看久久久| 国内精品久久久久国产 | 日韩精品资源 | 成人三级网站在线观看 | av福利第一导航 | 久久成人一区二区 | 天天爽天天射 | 久久综合激情 | 日本精品一区二区在线观看 | av中文字幕网 | 色综合色综合久久综合频道88 | 91精品资源 | 亚洲综合黄色 | 国产999精品久久久久久绿帽 | 成人午夜毛片 | av软件在线观看 | 丁香影院在线 | 99爱在线 | 天天射成人 | 狠狠地日| 日韩av在线免费看 | 日韩精品字幕 | 亚洲影视九九影院在线观看 | 日韩在线观看第一页 | 免费韩国av| 日韩成人免费在线 | 久久在草 | 91九色蝌蚪国产 | 天天爱天天操天天干 | 日日操操 | 97超碰福利久久精品 | 一二三精品视频 | 色资源网免费观看视频 | 国产99区| 在线观看国产区 | 在线观看国产v片 | 日韩高清在线看 | 成人欧美亚洲 | 亚洲国产精品va在线看黑人动漫 | 日韩免费观看av | 免费视频a | 亚洲精品午夜一区人人爽 | 九九精品久久久 | 18国产精品白浆在线观看免费 | 在线 国产 日韩 | 日韩视频三区 | 国产一级片免费播放 | 97视频人人免费看 | av片中文 | 九九有精品 | 色婷婷综合久久久中文字幕 | 91桃色在线免费观看 | 成人黄色短片 | 婷婷久久五月 | 日本久久久久久 | www.亚洲视频| 久久草草影视免费网 | 九草在线观看 | 性色av免费在线观看 | 激情av网址 | 国产精品福利在线观看 | 中文字幕在线观看网址 | 国产精品不卡一区 | 欧美性另类| 久久99国产精品免费网站 | 免费色网 | 亚洲成人av一区 | 久久综合九色综合97_ 久久久 | 国产特级毛片aaaaaaa高清 | 国产一级片毛片 | 欧美日韩在线观看一区 | 狠狠操天天射 | 久久免费成人网 | 一级α片免费看 | 日韩三级免费观看 | 亚洲成人黄色在线观看 | 欧美在线视频第一页 | 国产成人精品在线观看 | 99热免费在线 | 日韩高清成人在线 | 999久久久精品视频 日韩高清www | 一区二区精品在线观看 | 99精品国产兔费观看久久99 | 丁香婷婷综合激情五月色 | 能在线观看的日韩av | 又黄又刺激又爽的视频 | 天天摸天天操天天爽 | 在线观看视频国产 | 黄色a一级片 | 日本中文在线观看 | 天天操天天射天天插 | 中文字幕在线第一页 | 一级免费黄视频 | 免费观看性生交大片3 | 男女免费视频观看 | 99视频免费在线观看 | 免费视频一级片 | 国产精品入口a级 | 免费电影播放 | 美女黄频在线观看 | 亚洲最快最全在线视频 | 色婷婷在线视频 | 久久99精品久久久久久秒播蜜臀 | 特级西西www44高清大胆图片 | 精品国产区 | 一区二区三区在线观看 | 又黄又刺激的网站 | 成年人免费在线播放 | 免费看的黄色小视频 | 久久成人午夜视频 | www91在线| 综合天天色 | 黄色在线免费观看网址 | 久久老司机精品视频 | 91丨九色丨蝌蚪丰满 | 久久精品高清视频 | av资源网在线播放 | 精品人人爽 | 成 人 黄 色 片 在线播放 | 天堂网一区二区三区 | 天堂在线一区 | 中文国产字幕在线观看 | 2018亚洲男人天堂 | 有没有在线观看av | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 亚洲精品美女在线观看播放 | 99热国产在线观看 | 久草免费在线 | 天天干夜夜爱 | 深夜免费网站 | 成x99人av在线www | 日韩精品视频在线免费观看 | 国产人成在线视频 | 欧美特一级片 | 丰满少妇一级片 | 亚洲一区二区高潮无套美女 | 四虎最新域名 | 成年人电影毛片 | 91免费在线视频 | 中文字幕日韩高清 | 色资源在线观看 | 在线观看不卡视频 | 国内精品国产三级国产aⅴ久 | 国产一区在线观看视频 | 日日操狠狠干 | 国产99视频在线观看 | 人人擦| 精品一区精品二区 | 黄色国产在线 | 欧美成人影音 | 亚洲精品女 | 99色在线观看视频 | 成人黄色在线播放 | 黄色成人影视 | 日日夜夜网站 | 国产精品久久久999 国产91九色视频 | 免费一级片观看 | 在线观看av网 | 日本99热| 久久国产一区二区三区 | 天天操天天干天天干 | 18国产精品福利片久久婷 | 91精品老司机久久一区啪 | 久久在线电影 | 中国一级片在线播放 | 在线观看网站你懂的 | 香蕉久久久久久av成人 | 亚洲精品国产电影 | 免费黄在线看 | 日韩免费视频播放 | 日本乱视频 | 国产日韩中文字幕 | 久久精品3| 国精产品一二三线999 | 婷婷久月 | av片子在线观看 | 日韩草比| 天天操天天透 | 在线性视频日韩欧美 | 黄在线免费看 | 精品99久久| av一本久道久久波多野结衣 | 黄色小说视频在线 | 玖玖在线免费视频 | 日韩激情网 | 国产精品爽爽久久久久久蜜臀 | 国产一区二区在线免费播放 | 国产精品一区二区三区在线免费观看 | 最近最新最好看中文视频 | 日韩日韩日韩日韩 | 在线日韩视频 | 中文av资源站 | 在线看一级片 | 中文理论片 | 中文字幕丰满人伦在线 | 日韩免费大片 | 国产精品久久久久久久久久尿 | 在线观看亚洲国产 |