精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

給Git中級用戶的25個精品提示

移動開發
我使用 Git 大約已經有18個月時間,自認為能很好地駕馭它了。但是當我們請到 GitHub 的 Scott Chacon 來到 LVS 公司做專場培訓時,我在第一天就學到了大量的東西。由于有些人總是對使用 Git 自我感覺良好,因此,我想分享一些我從社區獲取到的 Git 精品,這樣就可能會幫助那些人無需浪費大量研究時間而直接找到答案。

我使用 Git 大約已經有18個月時間,自認為能很好地駕馭它了。但是當我們請到 GitHub 的 Scott Chacon 來到 LVS 公司(一個博彩/游戲軟件供應商/開發商)做專場培訓時,我在第一天就學到了大量的東西。

由于有些人總是對使用 Git 自我感覺良好,因此,我想分享一些我從社區獲取到的 Git 精品,這樣就可能會幫助那些人無需浪費大量研究時間而直接找到答案。

基本提示

1. 安裝之后第一步

安裝 Git 之后,你要做的第一件事情就是去配置你的名字和郵箱,因為每一次提交都需要這些信息:

  1. $ git config --global user.name "Some One" 
  2. $ git config --global user.email "someone@gmail.com" 

2. Git 是以指針為基礎

存儲在 git 中的所有東西都包含在一個文件中。當你提交的時候,git 會創建一個包含提交消息和相關數據的文件(名稱、郵件、日期/時間、上一次提交等等),并將其鏈接到一個樹形文件。樹形文件包含一個對象列表或者其它樹。對象或二進制大數據對象(BLOB)是提交的真正內容(一個文件,如果你愿意,雖然文件名沒有存儲在對象中,但會存儲在樹中)。所有這些文件都以對象的 SHA-1 哈希為文件名進行存儲。

分支和標簽只是一些文件,這些文件包含(基本上)一個指向提交的 SHA-1 哈希值。使用這些引用在靈活性和速度上均有大幅提升,創建一個新的分支就和創建一個文件一樣簡單,只是這個文件帶有分支名稱和一個包含指向提交(你從這個提交建立分支)的SHA-1哈希值。當然,當你使用 Git 命令行工具(或一個圖形用戶界面)時,你永遠也不會這么做,但它就是這么簡單。

你可能已經聽說過對 HEAD 的引用。它只是一個包含 SHA-1 引用的文件,這個引用指向你當前的提交。如果你正在解決一個合并沖突問題,查看一下 HEAD,你會發現,它與一個特定的分支或分支上的特定點無關,只和你現在的位置有關。

所有的分支指針保存在 .git/refs/heads 目錄下,HEAD 在 .git/HEAD 目錄下,標簽在 .git/refs/tags 目錄下 - 你可以隨意看看。

3. 兩個 Parents - 當然!

當在日志文件中查看一個合并提交的消息時,你會看到兩個 parents(與正常提交相比)。第一個parent 是你所在的分支,第二個 parents 是你并入的分支。

4. 合并沖突

到目前為止,我確信你一定有一個合并沖突需要解決。通常情況下,通過編輯該文件,刪除文件中的<<<<, ====, >>>>標記,然后保存你需要保留的代碼就可以了。有時候,在任何變更之前查看代碼都是一個值得推薦的做法,比如,在你對兩個有沖突的分支采取行動之前。這是又一個命令:

  1. $ git diff --merge 
  2. diff --cc dummy.rb   
  3. index 5175dde,0c65895..4a00477   
  4. --- a/dummy.rb 
  5. +++ b/dummy.rb 
  6. @@@ -1,5 -1,5 +1,5 @@@ 
  7.   class MyFoo 
  8.     def say 
  9. -     puts "Bonjour" 
  10.  -    puts "Hello world" 
  11. ++    puts "Annyong Haseyo" 
  12.     end 
  13.   end 

如果文件是二進制的,文件比較就不是那么容易了...你通常要做的是嘗試每個版本的二進制文件,并決定使用哪一個(或者在二進制文件編輯器手動復制部分內容)。從一個特定分支下 pull 一個文件副本(如果你要合并主分支和分支132的話):

  1. $ git checkout master flash/foo.fla # or... 
  2. $ git checkout feature132 flash/foo.fla 
  3. $ # Then... 
  4. $ git add flash/foo.fla 

另一種方法是從 git 中查看這個文件 - 你能夠以其他文件名的方式進行查看,然后將正確的文件(當你確定它是哪一個時)復制到正常的文件名中:

  1. $ git show master:flash/foo.fla > master-foo.fla 
  2. $ git show feature132:flash/foo.fla > feature132-foo.fla 
  3. $ # Check out master-foo.fla and feature132-foo.fla 
  4. $ # Let's say we decide that feature132's is correct 
  5. $ rm flash/foo.fla 
  6. $ mv feature132-foo.fla flash/foo.fla 
  7. $ rm master-foo.fla 
  8. $ git add flash/foo.fla 

更新:感謝 Carl 在早先的的博客評論中給與的提醒,你實際上能使用 “git checkout —ours flash/foo.fla” 和 “git checkout —theirs flash/foo.fla” 檢出一個特定的版本而不需要記住你要合并到哪一個分支。我個人更喜歡更明確些,但是你可以隨便選擇...

在解決了合并沖突問題之后(就像我上面所做的那樣),請記得將這個文件添加給索引。

服務器、分支和標簽

5. 遠程服務器

Git 最強大的功能之一是可以有一個以上的遠程服務器(另一個事實,你總是可以運行一個本地倉庫)。你不一定總是需要寫訪問權限,你可以從多個服務器中讀取(用于合并),然后寫到另一個服務器中。添加一個遠程服務器很簡單:

  1. $ git remote add john git@github.com:johnsomeone/someproject.git 

如果你想查看遠程服務器的相關信息,你可以這樣做:

  1. # shows URLs of each remote server 
  2. $ git remote -v  
  3.  
  4. # gives more details about each 
  5. $ git remote show name 

你可以查看本地分支和遠程分支之間的差別:

  1. $ git diff master..john/master 

你也能查看不在遠程分支上的 HEAD 的變化:

  1. $ git log remote/branch.. 
  2. # Note: no final refspec after .. 

6. 標簽

在 Git 中存在兩種類型的標簽 - 一個輕量級標簽和一個注解標簽。記著第二個提示中說過 Git 是基于指針的,二者的區別很簡單。一個輕量級標簽無非是一個指向提交的具名指針。你可以改變它并指向另一個提交。一個注解標簽是一個指向標簽對象的具名指針,這個標簽對象擁有自己的消息和歷史。如果有需要,標簽對象的消息可以采用 GPG 加密簽名。

創建兩種類型的標簽其實很容易(只是一個命令行選項的差異)

  1. $ git tag to-be-tested 
  2. $ git tag -a v1.1.0 # Prompts for a tag message 

7. 創建分支

在 Git 中創建分支非常容易(閃電般的速度,因為它僅僅需要創建一個不到100字節的文件)。創建一個新分支并切換過去的通用寫法是:

  1. $ git branch feature132 
  2. $ git checkout feature132 

當然,如果你知道你要馬上切換過去,你可以使用一條命令就能做到:

  1. $ git checkout -b feature132 

如果你要重命名一個本地分支,同樣是件容易的事(長命令方式用來顯示具體執行過程):

  1. $ git checkout -b twitter-experiment feature132 
  2. $ git branch -d feature132 

更新:或者你(就像 Brian Palmer 在博客文章評論中指出的那樣)只使用 “git branch” 和 -m 選項就可以一步到位:

  1. $ git branch -m twitter-experiment 
  2. $ git branch -m feature132 twitter-experiment 

#p#

8. 合并分支

在將來某個時候,你想要合并你的變更。有兩種方式可以實現:

  1. $ git checkout master 
  2. $ git merge feature83 # Or... 
  3. $ git rebase feature83 

merge 和 rebase 的區別在于,merge 試圖解決變更而且創建一個融合后的新提交,而 rebase 則試圖把自你上次在其他分支上的變化,在另一個分支的 HAED 上重現。但是,在你向遠程服務器推送一個分支之后,不要進行 rebase 操作 - 這會引發混淆/問題。

如果你不能確定哪些分支仍然有獨立的工作在進行 - 以便你能知道你需要合并哪一個分支以及刪除哪些分支,git branch 命令有兩個選項可以幫助實現這一點:

  1. # Shows branches that are all merged in to your current branch 
  2. $ git branch --merged 
  3.  
  4. # Shows branches that are not merged in to your current branch 
  5. $ git branch --no-merged 

9. 遠程分支

如果你有一個本地分支,你想讓它出現在遠程服務器上,你可以使用一個推送命令:

  1. $ git push origin twitter-experiment:refs/heads/twitter-experiment 
  2. # Where origin is our server name and twitter-experiment is the branch 

更新:感謝 Erlend 在博客文章評論中提到的 - 這實際上和 git push origin twitter-experiment 達到的效果的一樣,但是通過使用全部語法,你能看到你實際上在兩端使用了不同的名字(你的本地名字可能是 add-ssl-support,而遠程名字可能是 issue-1723)。

如果你想刪除一個遠程服務器上的分支(請注意分支名稱之前的冒號):

  1. $ git push origin :twitter-experiment 

如果你想顯示所有遠程分支的狀態,你能像這樣查看它們:

  1. $ git remote show origin 

這可能會列出一些服務器上曾經有過但現在已不存在的分支。如果碰到這種情況,你可以很輕松地使用如下命令從本地檢出并將其刪除:

  1. $ git remote prune 

最后,如果你有一個遠程分支,你想在本地進行跟蹤它,通常的做法是:

  1. $ git branch --track myfeature origin/myfeature 
  2. $ git checkout myfeature 

然而,如果你使用 -b 標識符去檢出的話,新版的 Git 會自動建立跟蹤:

  1. $ git checkout -b myfeature origin/myfeature 

在臨時存放區、索引和文件系統中保存內容

10. 臨時存放(Stashing)

在Git中,你可以把當前的工作狀態儲存在一個臨時的存儲區域堆棧,然后重新加以利用。簡單的案例如下:

  1. $ git stash # Do something... 
  2. $ git stash pop 

很多人推薦使用 git stash apply 來代替 “pop”,然而如果你真這么做的話,你最終得到一個長長的毫無用處的儲藏清單。如果對它進行清理,“pop” 只會把它從堆棧中刪除。如果你已經使用了 git stash apply ,你可以使用如下命令從堆棧中刪除最后一項:

  1. $ git stash drop 

Git 會基于當前的提交消息自動創建一個注釋信息。如果你更喜歡使用一個自定義的消息(因為它可能和之前的提交無關):

  1. $ git stash save "My stash message" 

如果你想從你的列表中(不必是最后一個)對一個特定的 stash 加以利用,你可以列出它們并像這樣來使用它:

  1. $ git stash list 
  2.   stash@{0}: On master: Changed to German 
  3.   stash@{1}: On master: Language is now Italian 
  4. $ git stash apply stash@{1

11. 交互式添加

在 Subversion 的世界里,你修改文件然后只是提交有變化的文件。而在 Git 的世界里,你在提交某些文件甚至某些補丁上有更多的控制權。為了提交某些文件或者文件的某些部分,你必須進入交互模式。

  1. $ git add -i 
  2.            staged     unstaged path 
  3.  
  4.  
  5. *** Commands *** 
  6.   1: status      2: update   3: revert   4: add untracked 
  7.   5: patch      6: diff     7: quit     8: help 
  8. What now> 

這會讓你進入一個基于交互式命令的菜單模式。你可以使用命令的數字符號或者加亮字符(如果你開啟顏色高亮顯示功能的話)進入對應模式,然后就是正常輸入文件數的問題了(你可以使用像1或1-4或2,4,7這樣的格式)。

如果你想進入修補模式(交互模式下輸入‘p’或‘5’ ),你也可以直接進入那個模式:

  1. $ git add -p     
  2. diff --git a/dummy.rb b/dummy.rb   
  3. index 4a00477..f856fb0 100644   
  4. --- a/dummy.rb 
  5. +++ b/dummy.rb 
  6. @@ -1,5 +1,5 @@ 
  7.  class MyFoo 
  8.    def say 
  9. -    puts "Annyong Haseyo" 
  10. +    puts "Guten Tag" 
  11.    end 
  12.  end 
  13. Stage this hunk [y,n,q,a,d,/,e,?]? 

如你所見,在底部你得到一系列選項為選擇去添加文件改變的部分,這個文件的所有變化等等。使用‘?’ 命令可以了解選不同選項的解釋。

12. 存儲/從文件系統檢索

一些項目(例如 Git 項目自身)直接在 Git 文件系統中存儲額外的文件而不必是檢入文件。

讓我們開始在 Git 中存儲一個任意文件:

  1. $ echo "Foo" | git hash-object -w --stdin 
  2. 51fc03a9bb365fae74fd2bf66517b30bf48020cb 

此時,該文件對象已在數據庫中,但是如果你不設置(一些東西)指向那個文件對象,它將被作為垃圾而回收。最簡單的方法是標記它:

  1. $ git tag myfile 51fc03a9bb365fae74fd2bf66517b30bf48020cb 

既然在這里我們已經標記了 myfile。當我們需要獲取該文件時,我們可以這樣做:

  1. $ git cat-file blob myfile 

程序員可能經常用到的工具文件(密碼、GPG 密鑰、等等),不需要每次都檢出到磁盤上(特別是在生產環境下),這種方法非常有效。

日志記錄

13. 查看日志

如果你不使用‘git log’查看最近提交歷史的話,你就不能長時間順利地使用 Git。但是,也存在一些如何更好使用它的建議。例如,你可以查看每次提交中改變的一個補丁:

  1. $ git log -p 

或者你可以只是查看一個哪些文件有所更改的概述:

  1. $ git log --stat 

你可以在一行中設置一個不錯的別名,用于顯示簡短的提交和漂亮的帶有消息的分支圖(像 gitk,但在命令行上):

  1. $ git config --global alias.lol "log --pretty=oneline --abbrev-commit --graph --decorate" 
  2. $ git lol 
  3. * 4d2409a (master) Oops, meant that to be in Korean 
  4. * 169b845 Hello world 

#p#

14. 檢索日志

如果你想在日志中查詢一個特定作者,你可以這樣指定:

  1. $ git log --author=Andy 

更新:感謝 Johannes 的評論,我終于化解了一部分困惑。

或者如果你有一個搜索詞出現在提交消息中:

  1. $ git log --grep="Something in the message" 

還有一個功能更強大的叫 pickaxe 的命令,它可以查找條目用來添加或刪除一個特定的內容(也就是,當它第一次出現或被刪除的時候)。這樣你就可以知道何時增加了一行(但是如果那一行中的字符隨后被改變,你將無從得知):

  1. $ git log -S "TODO: Check for admin status" 

如果你改變一個特定的文件會怎么樣呢,例如 lib/foo.rb

  1. $ git log lib/foo.rb 

比如說你有一個 feature/132 分支和一個 feature/145 分支,你想查看在這些分支但卻不在主分支上的提交(備注:^ 代表非):

  1. $ git log feature/132 feature/145 ^master 

你也可以使用 ActiveSupport 風格的日期縮小日期范圍:

  1. $ git log --since=2.months.ago --until=1.day.ago 

它默認使用 OR 模式來組合查詢,但是你也可以很輕松地改為 AND 模式(如果你的查詢項不止一個的話)

  1. $ git log --since=2.months.ago --until=1.day.ago --author=andy -S "something" --all-match 

15. 選擇查看/修改的版本

當引用一個修訂版本時,你有許多選項可以選擇,當然,這取決于你對此功能的了解程度:

  1. $ git show 12a86bc38 # By revision 
  2. $ git show v1.0.1 # By tag 
  3. $ git show feature132 # By branch name 
  4. $ git show 12a86bc38^ # Parent of a commit 
  5. $ git show 12a86bc38~2 # Grandparent of a commit 
  6. $ git show feature132@{yesterday} # Time relative 
  7. $ git show feature132@{2.hours.ago} # Time relative 

請注意,和上一節有所不同,在行尾的脫字符表示提交的 parent - 行首的脫字符則表示不在這個分支上。

16. 選擇一個范圍

最簡單的方法是這樣來用:

  1. $ git log origin/master..new 
  2. # [old]..[new] - everything you haven't pushed yet 

你也可以刪除 [new],這將使用當前的 HEAD。

時間回退和錯誤修復

17. 重置更改

如果你還沒有提交一個更改,你可以很容易地重置它:

  1. $ git reset HEAD lib/foo.rb 

通常使用‘unstage’作為別名比較好,因為它不是那么顯而易見。

  1. $ git config --global alias.unstage "reset HEAD" 
  2. $ git unstage lib/foo.rb 

如果你已經提交了文件,你可以做兩件事情 - 如果是最后一次提交,你可以這樣來修改:

  1. $ git commit --amend 

這將回滾到最后一次提交,讓你的工作副本回到變化存儲在暫存區的狀態,你可以編輯提交消息準備下一次提交。

如果你的提交不止一次,并且只想完全回滾它們,你可以重置分支回到之前的時間點。

  1. $ git checkout feature132 
  2. $ git reset --hard HEAD~2 

如果你真的想把分支指向一個完全不同的 SHA-1(也許你把一個分支的 HEAD 指向另一個分支,或者進一步提交),你可以按照以下方式去做:

  1. $ git checkout FOO 
  2. $ git reset --hard SHA 

實際上還有一種更便捷的方式(因為它不會先將你的工作副本變回最初 FOO 狀態,然后再指向 SHA):

  1. $ git update-ref refs/heads/FOO SHA 

18. 提交到錯誤的分支

好吧,讓我們假設你提交到主分支,但應該已經創建了一個叫做 experimental 的主題分支。為了移除這些變化,你可以在當前點創建一個分支,回退 HEAD,然后檢出新的分支:

  1. $ git branch experimental   # Creates a pointer to the current master state 
  2. $ git reset --hard master~3 # Moves the master branch pointer back to 3 revisions ago 
  3. $ git checkout experimental 

如果你已經在一個分支的一個分支的一個分支等上面做了些變更,這將會更復雜。然后你需要做的就是在這個分支上將其變更 rebase 到另一個的地方:

  1. $ git branch newtopic STARTPOINT 
  2. $ git rebase oldtopic --onto newtopic 

19. 交互式 rebasing

這是一個很酷的特性,我之前已看過演示,但當時沒有真正搞明白,現在來看其實很簡單。比方說,你已做了3次提交,但是你想對它們進行重新排序或者編輯(或者合并它們):

  1. $ git rebase -i master~3 

然后你將編輯器打開。你所要做的就是修改 “pick/squash/edit 的指令來進行如何提交,然后保存/退出。在編輯之后,你可以使用 git rebase —continue 讓你的每一個指令一個一個進行。

如果你選擇編輯一個文件,這會讓你停留在你提交時的狀態,因此你需要使用 git commit —amend 對它進行編輯。

備注:在 REBASE 過程中不要進行提交工作 - 只能添加然后使用 —continue, —skip or —abort 選項。

20. 清理

如果你已經提交了一些內容到你的分支中(也許你是從SVN中的舊代碼庫導入的),你想從歷史中刪除掉所有的已提交內容:

  1. $ git filter-branch --tree-filter 'rm -f *.class' HEAD 

如果你已經向遠程服務器推送過代碼,但自那之后提交的都是一些垃圾,在推送之前你可以在本地系統上執行這樣的操作:

  1. $ git filter-branch --tree-filter 'rm -f *.class' origin/master..HEAD 

#p#

各種各樣的提示

21. 之前你看過的引用

如果你知道你之前已經查看過一個 SHA-1,但是你已經做了一些重置/回退工作,你可以使用 reflog 命令去查看你最近看過的 SHA-1:

  1. $ git reflog 
  2. $ git log -g # Same as above, but shows in 'log' format 

22. 分支命名

一個可愛的小提示 - 請記住,分支的名字并不局限于 a-z 和 0-9 這些字符。名字中可以使用 / 和 . 來偽裝命名空間或者版本號,例如:

  1. $ # Generate a changelog of Release 132 
  2. $ git shortlog release/132 ^release/131 
  3. $ # Tag this as v1.0.1 
  4. $ git tag v1.0.1 release/132 

23. 尋找誰是始作俑者

尋找誰更改了一個文件中的一行代碼經常會用到。簡單命令如下:

  1. $ git blame FILE 

有時更改來自于前一個文件(如果你已經合并了兩個文件,或者你已經移動了一個函數),因此你可以這樣用:

  1. $ # shows which file names the content came from 
  2. $ git blame -C FILE 

有時通過向前或向后點擊來進行變化跟蹤,這是很好的方法。有一個內置的 GUI 程序專門為此設計:

  1. $ git gui blame FILE 

24. 數據庫維護

Git 通常不需要大量維護,它基本上可以自我維護。然而,你可以使用如下命令查看數據庫統計信息:

  1. $ git count-objects -v 

如果數值很高,你可以選擇使用垃圾回收你的重復內容。這不會影響推送或者其它用戶,但卻可以讓你的命令運行更快且占用更少空間:

  1. $ git gc 

經常運行一致性檢查也是值得推薦的做法:

  1. $ git fsck --full 

你也可以在行尾添加一個 —auto 參數(如果你頻繁運行它,或者在你的服務器上每日從 crontab 中運行它),如果統計數據表明必須進行要進行一致性檢查,只要 fsck 命令就行。

如果檢查 “dangling” 或 “unreachable” 的結果一切正常,這經常是由于回退 HEAD 或 rebasing的結果。如果檢查“missing” 或 “sha1 mismatch” 出了問題...尋求專業幫助吧!

25. 恢復一個丟失的分支

如果你使用 -D 選項刪除了一個分支 experimental,你可以重新創建它:

  1. $ git branch experimental SHA1_OF_HASH 

你可以使用 git reflog 來發現一個 SHA-1 哈希值,如果你近期訪問過它的話。

另一種方法是使用 git fsck —lost-found。一個懸空的提交就是一個 lost HEAD(它只會是一個已刪除分支的 HEAD,因為當一個 HEAD^ 被 HEAD 引用時,它就沒有懸空)

責任編輯:倪明
相關推薦

2023-08-31 22:45:15

Git命令效率

2017-08-25 17:00:52

LinuxMeld技巧

2013-04-16 14:42:47

增強iOS應用程序性能

2018-08-27 09:00:00

網站缺陷跟蹤工具調試工具

2020-07-20 10:29:20

物聯網安全物聯網IOT

2013-04-10 09:28:24

CSS3CSS

2013-04-16 14:56:54

增強iOS應用程序性能

2013-04-16 13:51:23

增強iOS應用程序性能

2013-08-12 15:00:24

LinuxLinux命令

2010-05-05 18:03:10

云計算

2022-07-22 10:06:17

JavaScript代碼

2014-04-08 14:11:02

2022-09-19 08:47:44

CIOTCSROI

2025-04-11 08:26:41

2009-08-26 18:18:17

ibmdwGit

2013-04-17 17:15:40

2017-09-11 20:16:58

2009-06-16 11:53:21

Java試題

2019-08-30 15:14:55

Python開發工具

2009-07-30 18:06:47

BSM用戶
點贊
收藏

51CTO技術棧公眾號

国产精品一区电影| 亚洲国产精品系列| 波多野结衣三级在线| av在线资源观看| 夜久久久久久| 色多多国产成人永久免费网站| 国产精品久久久久久久av福利| 欧美草逼视频| 欧美高清在线一区二区| 97在线电影| 中文天堂在线视频| 一区二区三区四区五区精品视频 | 亚洲高清在线观看视频| 噜噜噜躁狠狠躁狠狠精品视频| 久久精品99久久久香蕉| 一区二区三区免费在线观看视频| 欧美天堂在线| 黑丝美女久久久| 97超碰人人爱| 第一页在线观看| 波多野结衣亚洲一区| 国产主播精品在线| 亚洲欧美日韩激情| 亚洲三级国产| 九九热精品在线| 日本在线观看网址| 亚洲另类春色校园小说| 精品乱码亚洲一区二区不卡| 思思久久精品视频| 欧美一区 二区 三区| 亚洲国产一区二区三区青草影视| 国产高清精品软男同| 免费国产在线视频| 99re这里都是精品| 5566中文字幕一区二区| 国产一区二区在线视频观看| 日本va欧美va欧美va精品| 26uuu久久噜噜噜噜| 国产乱码久久久久久| 欧美激情1区2区3区| 日韩在线精品视频| 蜜桃av免费在线观看| 精品视频免费在线观看| 亚洲色图15p| 国产中文字幕一区二区| 蜜桃一区av| 亚洲黄一区二区| 亚洲欧美日韩色| 激情小说亚洲图片| 亚洲黄色av女优在线观看| 中文字幕人妻熟女人妻a片| 国产精品亚洲欧美一级在线| 欧美精品vⅰdeose4hd| 亚洲欧美日韩精品一区| 亚洲欧美在线人成swag| 欧美妇女性影城| 国产永久免费网站| 国产精品18| 欧美草草影院在线视频| 在线xxxxx| 色吊丝一区二区| 亚洲欧美国产精品专区久久| 四虎永久免费在线观看| 不卡中文字幕| 久久精品视频网站| 欧美成人免费观看视频| 亚洲欧洲综合| 热久久美女精品天天吊色| 久久永久免费视频| 久久电影国产免费久久电影| 亚洲自拍av在线| 亚洲第一色视频| 91丨九色porny丨蝌蚪| 欧美深深色噜噜狠狠yyy| 成年在线电影| 亚洲欧美日韩综合aⅴ视频| 精品人妻大屁股白浆无码| 超碰99在线| 日本二三区不卡| 激情在线观看视频| 精品一区二区男人吃奶| 亚洲色图狂野欧美| 成人免费精品动漫网站| 99在线|亚洲一区二区| 国产精品久久久久aaaa九色| 国产女人18毛片18精品| 成人国产精品免费观看| 日韩精品一区二区三区色偷偷 | 中文字幕高清不卡| 8x8ⅹ国产精品一区二区二区| wwww亚洲| 欧美色精品在线视频| ass极品水嫩小美女ass| 羞羞答答一区二区| 精品国产网站地址| 亚洲午夜18毛片在线看| 国产在线一区观看| 久久精品午夜一区二区福利| 免费av不卡| 天天综合网 天天综合色| 黄色手机在线视频| 老司机在线精品视频| 最好看的2019的中文字幕视频| 欧美日韩偷拍视频| 日韩精品1区2区3区| 91久久爱成人| 伊人免费在线| 一本色道久久综合亚洲aⅴ蜜桃| 韩国一区二区在线播放| 久草精品在线| 高清一区二区三区四区五区| 在线播放成人av| 91色九色蝌蚪| 国产一区二区三区乱码| 日韩在线电影| 亚洲欧美中文在线视频| 精品无码久久久久久久久| 美女视频免费一区| 欧洲一区二区日韩在线视频观看免费| 污视频免费在线观看| 欧美日韩一区高清| 久久精品—区二区三区舞蹈 | 日本999视频| 久久动漫网址| 欧美精品做受xxx性少妇| 中文字幕av在线免费观看| 91麻豆成人久久精品二区三区| 伊人久久在线观看| 在线欧美激情| 中文字幕亚洲天堂| 国产日韩久久久| 久久先锋影音av鲁色资源网| 三上悠亚久久精品| 91蝌蚪精品视频| 九九久久久久99精品| 91女人18毛片水多国产| 国产精品网友自拍| 九九热在线免费| 红桃视频在线观看一区二区| 日韩av电影免费观看高清| 午夜在线视频免费| 精品久久久久久久中文字幕 | 中文在线资源观看网站视频免费不卡| 又粗又黑又大的吊av| 另类图片第一页| 国语自产精品视频在线看| 国产男男gay体育生网站| 亚洲欧美日韩综合aⅴ视频| 在线视频一二区| 亚洲乱码精品| 97免费高清电视剧观看| 欧美色图天堂| 日韩高清av在线| 日本韩国欧美中文字幕| 91美女视频网站| 欧美精品色婷婷五月综合| 综合干狼人综合首页| 国产精品成人免费视频| 91av资源在线| 91精品国产入口| 久久久久久av无码免费网站| 成人国产精品免费观看视频| 国产精品后入内射日本在线观看| 亚洲视频分类| 国产精品一区二区性色av| 欧美一区二区三区| 日韩精品在线看片z| 日韩激情在线播放| 久久精品视频一区二区三区| 成人亚洲精品777777大片| 欧美3p视频| yy111111少妇影院日韩夜片 | 欧美三级不卡| 精品国产乱码久久久久久88av| 成人小电影网站| 视频在线观看一区二区| www.国产视频| 日韩欧美国产网站| 网站永久看片免费| 丰满亚洲少妇av| 可以在线看的黄色网址| 五月天久久网站| 国产欧美日韩视频一区二区三区| 奇米777日韩| 久久久精品视频成人| 熟妇高潮一区二区高潮| 欧美亚男人的天堂| 久久久久久久久97| 国产亚洲视频系列| 中文字幕在线播放一区二区| 久久久久久久欧美精品| 91嫩草国产丨精品入口麻豆| 爽爽窝窝午夜精品一区二区| 国产美女精品视频| 成人三级高清视频在线看| 中文字幕一区二区三区电影| 天天插天天干天天操| 欧美日韩中文一区| 国产成人无码一区二区三区在线| 国产精品网站在线观看| 国产视频久久久久久| 精品一区二区在线免费观看| 91免费视频网站在线观看| 国产精品久久久久久| 欧美激情第六页| 国产美女撒尿一区二区| 91精品国产综合久久久久久久久| 精品众筹模特私拍视频| 日韩有码视频在线| 久久国产精品高清一区二区三区| 日韩天堂在线观看| 这里只有精品免费视频| 福利一区视频在线观看| 少妇影院在线观看| 中文字幕五月欧美| 波多野吉衣中文字幕| 盗摄精品av一区二区三区| 日本黄色的视频| 日韩精品一卡二卡三卡四卡无卡| 阿v天堂2018| 国产精品hd| 亚洲国产日韩欧美| 美女毛片一区二区三区四区| 精品1区2区| ady日本映画久久精品一区二区| 成人黄色大片在线免费观看| 欧美va在线观看| 日本免费在线精品| 欧美巨大丰满猛性社交| 欧美高跟鞋交xxxxhd| 亚洲精品天堂| 久久av.com| 1区2区3区在线视频| 蜜臀久久99精品久久久无需会员 | 亚洲美女福利视频| 日韩视频不卡中文| 精品国产一级片| 日韩欧美国产一区在线观看| 99精品人妻无码专区在线视频区| 欧美电影一区二区| 88av在线视频| 在线播放日韩导航| 国产乱码一区二区| 91精品国产综合久久精品app| 91精品国产乱码久久| 欧美日韩一卡二卡三卡| 97人妻精品一区二区三区动漫| 欧美精品色综合| 国产精品主播一区二区| 91精品婷婷国产综合久久竹菊| 国产乱淫a∨片免费视频| 在线不卡一区二区| 精品久久久无码中文字幕| 日韩欧美中文一区二区| 高潮毛片7777777毛片| 亚洲成人激情在线| 天堂av网在线| 中文欧美在线视频| 毛片在线看片| 欧美激情一区二区三区在线视频观看 | 国产精品乱码久久久久| 国产精品毛片一区二区三区| 777久久久精品一区二区三区| 国产亚洲在线| 成年人小视频网站| 美女视频网站黄色亚洲| 99999精品| 成人免费不卡视频| 亚洲久久久久久久| 国产精品久久久久永久免费观看| 小早川怜子一区二区的演员表| 亚洲综合色自拍一区| 国产午夜在线播放| 欧美性做爰猛烈叫床潮| 亚洲爱情岛论坛永久| 亚洲高清色综合| 国产免费永久在线观看| 久久色在线播放| 不卡专区在线| 国产欧洲精品视频| 粉嫩久久久久久久极品| 欧美亚洲免费高清在线观看 | 久久久久久久久国产精品| 在线手机中文字幕| 成人羞羞国产免费| 成人自拍在线| 天天人人精品| 亚洲高清激情| 五月婷婷六月丁香激情| 成人美女在线视频| 91香蕉国产视频| 亚洲va欧美va人人爽午夜| 中文字幕一区二区三区免费看| 日韩视频一区二区三区在线播放 | 《视频一区视频二区| 欧美日韩大片在线观看| 在线一区二区三区四区| 精品人妻一区二区三区浪潮在线 | 91精品国产全国免费观看 | 久久影院模特热| 精品国产第一福利网站| 成人在线观看av| 久久香蕉国产| 亚洲 高清 成人 动漫| 国产酒店精品激情| 亚洲精品视频网址| 欧美视频裸体精品| 性中国xxx极品hd| 日韩中文在线视频| 自拍视频在线看| 高清不卡日本v二区在线| 久久一区二区三区喷水| 又粗又黑又大的吊av| 成人午夜私人影院| 777777国产7777777| 在线观看视频一区二区欧美日韩| 手机在线观看毛片| 欧美人成在线视频| 二区三区精品| 亚洲巨乳在线观看| 视频在线观看一区二区三区| 第四色在线视频| 亚洲一区精品在线| 精品久久久久中文慕人妻| 久久中文久久字幕| а√天堂资源国产精品| 欧美中文娱乐网| 三级欧美在线一区| 成年人网站免费看| 婷婷中文字幕综合| 日韩中文字幕影院| 欧美极品欧美精品欧美视频| 精品国产一区二区三区性色av| 亚洲永久激情精品| 久久国产精品色| 欧美一区二区三区观看| 欧美日韩成人综合| 欧美成人二区| 成人美女av在线直播| 888久久久| 妖精视频在线观看| 亚洲精品国产精品乱码不99 | 中文字幕手机在线视频| 亚洲精品在线视频| 精品国模一区二区三区| 欧美日韩在线一二三| 秋霞影院一区二区| 亚洲a∨无码无在线观看| 欧美美女激情18p| dy888亚洲精品一区二区三区| 成人在线免费观看视视频| 久久久久电影| 人妻换人妻a片爽麻豆| 午夜影院久久久| 亚洲欧美自偷自拍| 国产精品video| 97视频精品| www日本在线观看| 偷拍一区二区三区四区| 久久米奇亚洲| 国产欧美日韩免费| 欧美一区二区三区另类| 国产性猛交96| 日韩欧美第一页| 婷婷在线视频观看| 爱情岛论坛亚洲入口| 亚洲一区二区三区高清不卡| 国产一级久久久久毛片精品| 欧美久久一区二区| 好吊日av在线| 欧美lavv| 久久电影网站中文字幕| 久久精品视频日本| 亚洲乱亚洲乱妇无码| 玖玖精品在线| 美脚丝袜脚交一区二区| 日本一区二区综合亚洲| a天堂视频在线| 4438全国成人免费| 97视频热人人精品免费| 无码精品一区二区三区在线播放| 色播五月激情综合网| 中文字幕有码在线观看| 久久久福利视频| 国模无码大尺度一区二区三区| 精品一区二区三区人妻| 一本久久综合亚洲鲁鲁| 高清不卡一区| 无码精品国产一区二区三区免费| 综合自拍亚洲综合图不卡区| 手机看片福利永久| 成人一区二区电影| 亚洲精一区二区三区| 在线观看黄网址| 国产偷国产偷亚洲清高网站| 精品三级国产| 99视频精品免费| 亚洲电影一区二区| 国产原创精品视频| 日韩和欧美的一区二区|