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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GitHub多人协作简明教程

發(fā)布時(shí)間:2023/12/2 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GitHub多人协作简明教程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文面向已經(jīng)了解/熟悉git基本命令但是并不熟悉如何使用GitHub進(jìn)行多人協(xié)作開發(fā)項(xiàng)目的同學(xué)。

為了簡(jiǎn)單起見,這里假設(shè)只有兩個(gè)開發(fā)人員,HuanianLiDaxiangLi。他們?cè)贕itHub上的地址和角色為:

  • HuanianLi: https://github.com/huanianli? # Maintainer
  • DaxiangLi: https://github.com/daxiangli? # Contributor

HuanianLi將創(chuàng)建一個(gè)項(xiàng)目kaiba, 然后請(qǐng)DaxiangLi來幫忙做開發(fā)。 為了真實(shí)地進(jìn)行場(chǎng)景演繹,我們將首先創(chuàng)建兩個(gè)GitHub帳號(hào)。


1. 在GitHub上創(chuàng)建兩個(gè)帳號(hào)(HuanianLi and DaxiangLi這里以HuanianLi為例)

1.1 打開GitHub的主頁: https://github.com/

1.2 點(diǎn)擊右上角的Sign up

1.3 跳轉(zhuǎn)到注冊(cè)頁面后,開始Create your personal account,按照要求輸入U(xiǎn)sername, Email Address, Password, 例如:

1.4 點(diǎn)擊頁面下方的"Create an account"按鈕并按照后續(xù)提示完成注冊(cè)。


2. 在Linux桌面上創(chuàng)建兩個(gè)用戶(huanianli and daxiangli), (這里以huanianli為例)

2.1 創(chuàng)建用戶huanianli

root@idorax:~# useradd -d /home/huanianli -m -s /bin/bash -c "Huanian Li" huanianli

2.2 對(duì)用戶huanianli的git進(jìn)行設(shè)置 (這里直接編輯文件~/.gitconfig

huanianli@ThinkCentre:~$ vim ~/.gitconfig huanianli@ThinkCentre:~$ cat -n ~/.gitconfig 1 [user]2 email = huanian.li@gmail.com3 name = Huanian Li4 [core]5 editor = vim6 [push]7 default = matching huanianli@ThinkCentre:~$ huanianli@ThinkCentre:~$ git config -l user.email=huanian.li@gmail.com user.name=Huanian Li core.editor=vim push.default=matching huanianli@ThinkCentre:~$

2.3 在huanianli的HOME目錄下創(chuàng)建一個(gè)工作空間workspace

huanianli@ThinkCentre:~$ cd ~ huanianli@ThinkCentre:~$ mkdir workspace huanianli@ThinkCentre:~$ ls workspace huanianli@ThinkCentre:~$

3. (Maintainer) HuanianLi在GitHub上創(chuàng)建一個(gè)項(xiàng)目kaiba

3.1 登錄HuanianLi的GitHub空間,打開頁面Repositories, e.g.

https://github.com/HuanianLi?tab=repositories

點(diǎn)擊頁面右邊的New按鈕, 進(jìn)入創(chuàng)建一個(gè)新的代碼倉庫的頁面。

點(diǎn)擊"Create repository"完成創(chuàng)建。

3.2 進(jìn)入HuanianLi的Linux桌面,clone在3.1創(chuàng)建的項(xiàng)目kaiba

huanianli@ThinkCentre:~$ cd workspace huanianli@ThinkCentre:~/workspace$ git clone https://github.com/HuanianLi/kaiba.git Cloning into 'kaiba'... warning: You appear to have cloned an empty repository. Checking connectivity... done. huanianli@ThinkCentre:~/workspace$ ls kaiba huanianli@ThinkCentre:~/workspace$ cd kaiba huanianli@ThinkCentre:~/workspace/kaiba$ vi README.md huanianli@ThinkCentre:~/workspace/kaiba$ cat -n README.md1 kaiba: A sandbox project of Kaiba huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git add README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git commit -m "Initialize the project by adding README.md" [master (root-commit) c0bd2ed] Initialize the project by adding README.md1 file changed, 1 insertion(+)create mode 100644 README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git log commit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git branch * master huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git push -u origin master Username for 'https://github.com': HuanianLi Password for 'https://HuanianLi@github.com': Counting objects: 3, done. Writing objects: 100% (3/3), 273 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/HuanianLi/kaiba.git* [new branch] master -> master Branch master set up to track remote branch master from origin. huanianli@ThinkCentre:~/workspace/kaiba$

在上面的操作中,關(guān)鍵的步驟是:

  • clone
git clone https://github.com/HuanianLi/kaiba.git
  • push
git push -u origin master

注意因?yàn)槭堑谝淮蝡ush, ‘-u’ 是必須的。

3.3 一旦完成git push之后,我們就可以瀏覽GitHub上的項(xiàng)目了


4. (Contributor) DaxiangLi登錄他的GitHub,? 然后進(jìn)入(Maintainer) HuanianLi的GitHub空間,fork項(xiàng)目kaiba

4.1 DaxiangLi登錄他的GitHub


?

4.2 進(jìn)入(Maintainer) HuanianLi的GitHub空間, 點(diǎn)開項(xiàng)目kaiba

注意: 目前的 Fork 為0。

4.3 fork項(xiàng)目kaiba, 直接點(diǎn)Fork按鈕

Fork 結(jié)束后, DaxiangLi的GitHub里就有了項(xiàng)目kaiba


5. (ContributorDaxiangLi貢獻(xiàn)代碼給項(xiàng)目kaiba

5.1 DaxiangLi在他的Linux桌面上clone代碼

daxiangli@ThinkPad:~/workspace$ git clone https://github.com/DaxiangLi/kaiba.git Cloning into 'kaiba'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. Checking connectivity... done.

兩個(gè)問題:

  • DaxiangLi 能直接clone HuanianLi的GitHub里的代碼嗎?? A: 能。
  • DaxiangLi 能直接clone HuanianLi的GitHub里的代碼,然后做修改后push回去嗎? A: 不能。

5.2 DaxiangLi新建一個(gè)開發(fā)分支

daxiangli@ThinkPad:~/workspace/kaiba$ git checkout -b dev Switched to a new branch 'dev'

其中, git checkout -b dev 等同于

1 git branch dev 2 git checkout dev

5.3 把HuanianLi的項(xiàng)目添加到DaxiangLi的遠(yuǎn)程倉庫

daxiangli@ThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git

?5.4 將HuanianLi的分支取下來并更新到本地

daxiangli@ThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream From https://github.com/HuanianLi/kaiba* [new branch] master -> upstream/master

daxiangli@ThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master -> FETCH_HEAD

?5.5 合并HuanianLi的分支到本地(注意:這一步在第一次其實(shí)不需要)

daxiangli@ThinkPad:~/workspace/kaiba$ git rebase upstream/master Current branch dev is up to date.

?5.6 DaxiangLi添加一個(gè)文件并提交commit

daxiangli@ThinkPad:~/workspace/kaiba$ git add foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git commit -m "DaxiangLi: Add foo.py" daxiangli@ThinkPad:~/workspace/kaiba$ git push -u origin dev

?5.7 進(jìn)入DaxiangLi的GitHub, 提交一個(gè)PR

Q: 什么是PR? (參考資料來源點(diǎn)這里)

A: PR是Pull Request的縮寫,是開發(fā)者使用GitHub進(jìn)行協(xié)作的利器。簡(jiǎn)單來說,Pull Request是一種機(jī)制,讓開發(fā)者告訴項(xiàng)目成員一個(gè)功能已經(jīng)完成。一旦feature分支開發(fā)完畢,開發(fā)者使用GitHub賬號(hào)提交一個(gè)Pull Request。它告訴所有參與者,他們需要審查代碼,并將代碼并入master分支。Pull Request不只是一個(gè)通知,還是一個(gè)專注于某個(gè)提議功能的討論版面。Pull Request 需要兩個(gè)不同的分支或是兩個(gè)不同的倉庫, 其工作原理大概是:

  • 開發(fā)者在他們的本地倉庫中為某個(gè)功能創(chuàng)建一個(gè)專門的分支;
  • 開發(fā)者將分支推送到公共的GitHub倉庫;
  • 開發(fā)者用GitHub發(fā)起一個(gè)Pull Request;
  • 其余的團(tuán)隊(duì)成員審查代碼,討論并且做出修改;
  • 項(xiàng)目維護(hù)者將這個(gè)功能并入官方的倉庫,然后關(guān)閉這個(gè)Pull Request。
  • ?現(xiàn)在點(diǎn)擊Compare & pull request按鈕,就創(chuàng)建一個(gè)PR,

    點(diǎn)頁面下方的Create pull request按鈕即可。 生成的PR看起來是這樣的:


    6. (Maintainer) HuanianLi 查看PR并Merge

    6.1 HuanianLi查看PR

    HuanianLi可能在PR中加入comment, 要求DaxiangLi做相應(yīng)的修改。 這里為簡(jiǎn)單起見,直接Review通過。

    ?

    6.2 HuanianLi點(diǎn)Merge pull request

    ?

    到此為止,DaxiangLi成功地給HuanianLi貢獻(xiàn)了一次代碼!! 當(dāng)然,這次貢獻(xiàn)過程異常簡(jiǎn)單,因?yàn)槲瓷婕暗經(jīng)_突解決。接下來將介紹更復(fù)雜的情況,這才是重點(diǎn):-)

    6.3 HuanianLi 查看kaiba并刪除無用的commit

    6.3.1 使用git pull更新本地空間

    huanianli@ThinkCentre:~/workspace/kaiba$ git pull remote: Counting objects: 4, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 0), reused 3 (delta 0), pack-reused 0 Unpacking objects: 100% (4/4), done. From https://github.com/HuanianLi/kaibac0bd2ed..b8a0b63 master -> origin/master Updating c0bd2ed..b8a0b63 Fast-forwardfoo.py | 16 ++++++++++++++++1 file changed, 16 insertions(+)create mode 100644 foo.py

    注意: 在頂端的commit不是我們想要的,需要把它移除掉。

    commit b8a0b63d8b18f8466e79284ed6022340ca5a43a8 Merge: c0bd2ed 640f6f6 Author: Huanian Li <41667254+HuanianLi@users.noreply.github.com> Date: Wed Jul 25 18:55:02 2018 +0800Merge pull request #1 from DaxiangLi/devDaxiangLi: Add foo.py

    ?

    6.3.2 使用git rebase -i移除不需要的commit

    huanianli@ThinkCentre:~/workspace/kaiba$ git rebase -i c0bd2ed35e10180209726199af422a63a007355f Successfully rebased and updated refs/heads/master.

    在彈出的交互界面中不做任何修改,直接保存退出即可。

    ?

    6.3.3 使用git push --force強(qiáng)制更新遠(yuǎn)端的master分支

    huanianli@ThinkCentre:~/workspace/kaiba$ git push --force Username for 'https://github.com': HuanianLi Password for 'https://HuanianLi@github.com': Total 0 (delta 0), reused 0 (delta 0) To https://github.com/HuanianLi/kaiba.git+ b8a0b63...640f6f6 master -> master (forced update)

    這下清爽啦!!

    ?


    下面將重點(diǎn)討論這兩種比較復(fù)雜的場(chǎng)景:

    • 場(chǎng)景一 : PR Review過程中upstream有更新, 但沒有沖突需要解決。例如: DaxiangLi繼續(xù)修改foo.py, 提交一個(gè)PR, 在Review的過程中, HuanianLi增加了一個(gè)Makefile并提交了代碼。
    • 場(chǎng)景二 : PR Review過程中upstream有更新, 而且需要解決沖突。例如: DaxiangLi繼續(xù)修改foo.py, 提交一個(gè)PR, 在Review的過程中, HuanianLi也修改了foo.py并提交了代碼。

    這兩種場(chǎng)景是常有的事情,因?yàn)镻R提交后,在review的過程中可能改動(dòng)多次。那么,在改動(dòng)的過程中,別的合作伙伴給upstream里貢獻(xiàn)了代碼并導(dǎo)致commit增加是常有的事情。而且,別的合作伙伴很可能跟你改動(dòng)了同一個(gè)文件,那么你就需要做沖突解決。


    場(chǎng)景一: PR Review過程中upstream有更新, 但沒有沖突需要解決

    101 - 在開發(fā)之前,DaxiangLi先同步upstream,保證remotes/origin/master與remotes/upstream/master一致

    daxiangli@ThinkPad:~/workspace$ daxiangli@ThinkPad:~/workspace$ git clone https://github.com/DaxiangLi/kaiba.git Cloning into 'kaiba'... remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0 Unpacking objects: 100% (6/6), done. Checking connectivity... done. daxiangli@ThinkPad:~/workspace$ cd kaiba daxiangli@ThinkPad:~/workspace/kaiba$ ls README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream From https://github.com/HuanianLi/kaiba* [new branch] master -> upstream/master daxiangli@ThinkPad:~/workspace/kaiba$ ls README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master -> FETCH_HEAD daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git rebase upstream/master First, rewinding head to replay your work on top of it... Fast-forwarded master to upstream/master. daxiangli@ThinkPad:~/workspace/kaiba$ ls foo.py README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branch -a * masterremotes/origin/HEAD -> origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/master daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin master Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Total 0 (delta 0), reused 0 (delta 0) To https://github.com/DaxiangLi/kaiba.gitc0bd2ed..640f6f6 master -> master daxiangli@ThinkPad:~/workspace/kaiba$

    102 - DaxiangLi 切換到dev分支

    daxiangli@ThinkPad:~/workspace/kaiba$ git branch -a * masterremotes/origin/HEAD -> origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/master daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git checkout dev Branch dev set up to track remote branch dev from origin. Switched to a new branch 'dev' daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branch -a * devmasterremotes/origin/HEAD -> origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/master daxiangli@ThinkPad:~/workspace/kaiba$

    103 - DaxiangLi修改foo.py并commit,然后push到remotes/origin/dev

    daxiangli@ThinkPad:~/workspace/kaiba$ ls foo.py README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ vi foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git diff diff --git a/foo.py b/foo.py index 55568dd..4ca134c 100644 --- a/foo.py +++ b/foo.py @@ -3,6 +3,10 @@import sysdef main(argc, argv): + if argc != 2: + sys.stderr.write("Usage: %s <num>\n" % argv[0]) + return 1 +i = 0while i < int(argv[1]):print "%02d: Hello World." % i daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git status On branch dev Your branch is up-to-date with 'origin/dev'. 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: foo.pyno changes added to commit (use "git add" and/or "git commit -a") daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git commit -a -m "DaxiangLi: add checking to foo.py" [dev e1bb21e] DaxiangLi: add checking to foo.py1 file changed, 4 insertions(+) daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git show commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: add checking to foo.pydiff --git a/foo.py b/foo.py index 55568dd..4ca134c 100644 --- a/foo.py +++ b/foo.py @@ -3,6 +3,10 @@import sysdef main(argc, argv): + if argc != 2: + sys.stderr.write("Usage: %s <num>\n" % argv[0]) + return 1 +i = 0while i < int(argv[1]):print "%02d: Hello World." % i daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin dev Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 388 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/DaxiangLi/kaiba.git640f6f6..e1bb21e dev -> dev daxiangli@ThinkPad:~/workspace/kaiba$

    現(xiàn)在,從DaxiangLi的GitHub空間里可以看到新增加到dev分支的commit e1bb21e

    104 - DaxiangLi為dev分支的commit e1bb21e創(chuàng)建一個(gè)PR

    ?

    105 - HuanianLi開始review DaxiangLi的PR

    105.1 在HuanianLi的GitHub空間里看到的PR

    105.2 HuanianLi 給PR#2做review, 要求Daxiang Li做修改,于是Daxiang Li看到的PR是

    105.3 - DaxiangLi根據(jù)HuanianLi的comments做修改

    daxiangli@ThinkPad:~/workspace/kaiba$ vi foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git diff diff --git a/foo.py b/foo.py index 4ca134c..84b0787 100644 --- a/foo.py +++ b/foo.py @@ -5,14 +5,14 @@ import sysdef main(argc, argv):if argc != 2:sys.stderr.write("Usage: %s <num>\n" % argv[0]) - return 1 + return (-1)i = 0while i < int(argv[1]):print "%02d: Hello World." % ii += 1- return 0 + return (0)if __name__ == '__main__':argv = sys.argvdaxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git add foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git commit -m "DaxiangLi: add checking to foo.py (2)" [dev d266d6b] DaxiangLi: add checking to foo.py (2)1 file changed, 2 insertions(+), 2 deletions(-) daxiangli@ThinkPad:~/workspace/kaiba$ git log commit d266d6b3f4b6569e82dcd479c020a53f2d5ef556 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 12:54:48 2018 +0800DaxiangLi: add checking to foo.py (2)commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 331 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/DaxiangLi/kaiba.gite1bb21e..d266d6b dev -> dev daxiangli@ThinkPad:~/workspace/kaiba$

    105.4 DaxiangLi在PR上做comment, 告訴HuanianLi已經(jīng)改好了。 (注意: PR上出現(xiàn)了兩個(gè)commit)

    • commit 1: e1bb21e
    • commit 2: d266d6b

    105.5?HuanianLi 重新檢查DaxiangLi的PR

    HuanianLi一看DaxiangLi的PR包含了多個(gè)commit, 這哪成啊。。。立即給DaxiangLi寫comment, 要求合并多個(gè)commits為一個(gè)commit。

    105.6 DaxiangLi著手合并多個(gè)commits

    daxiangli@ThinkPad:~/workspace/kaiba$ git log commit d266d6b3f4b6569e82dcd479c020a53f2d5ef556 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 12:54:48 2018 +0800DaxiangLi: add checking to foo.py (2)commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git rebase -i 640f6f6 [detached HEAD 7bab5c2] DaxiangLi: add checking to foo.pyDate: Thu Jul 26 11:39:22 2018 +08001 file changed, 5 insertions(+), 1 deletion(-) Successfully rebased and updated refs/heads/dev. daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 7bab5c2d12389b6a5bf5cd602dff684ea336a52e Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ git diff daxiangli@ThinkPad:~/workspace/kaiba$ git show commit 7bab5c2d12389b6a5bf5cd602dff684ea336a52e Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: add checking to foo.pydiff --git a/foo.py b/foo.py index 55568dd..84b0787 100644 --- a/foo.py +++ b/foo.py @@ -3,12 +3,16 @@import sysdef main(argc, argv): + if argc != 2: + sys.stderr.write("Usage: %s <num>\n" % argv[0]) + return (-1) +i = 0while i < int(argv[1]):print "%02d: Hello World." % ii += 1- return 0 + return (0)if __name__ == '__main__':argv = sys.argv daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push --force Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 404 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/DaxiangLi/kaiba.git+ d266d6b...7bab5c2 dev -> dev (forced update) daxiangli@ThinkPad:~/workspace/kaiba$

    注意:

  • 做git push的時(shí)候必須使用 'git push --force'
  • 做git rebase -i <commit id>的時(shí)候, <commit id>是上一次官方merge的commit id.
  • 關(guān)于git rebase -i <commit id>的過程,圖解如下:

    • 01 - 開始做rebase

    • 02 - 進(jìn)入rebase交互界面,注意閱讀各個(gè)command的含義

    • 03 - 將commit d266d6b應(yīng)用squash

    • 04 - 在vim里按:wq (保存退出)

    • 05 - 切換到commit交互界面

    • 06 : 刪除L6-9, 然后保存退出vim

    ?

    105.7 DaxiangLi更改一下commit的comment, 重新push

    daxiangli@ThinkPad:~/workspace/kaiba$ git commit --amend [dev 254347c] DaxiangLi: Add checking to foo.pyDate: Thu Jul 26 11:39:22 2018 +08001 file changed, 5 insertions(+), 1 deletion(-) daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 254347cbe57fa043ffcc774e26eabdcd63ea8b30 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ git push --force Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 405 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To https://github.com/DaxiangLi/kaiba.git+ db73315...254347c dev -> dev (forced update)

    ?

    105.8 DaxiangLi重新在PR上加comment, 請(qǐng)HuanianLi再次review (注意: PR上現(xiàn)在只有一個(gè)commit了)

    ?

    105.9 HuanianLi 給kaiba.git里添加一個(gè)Makefile, 在檢查DaxiangLi的PR最近改動(dòng)之前

    huanianli@ThinkCentre:~/workspace/kaiba$ ls foo.py README.md huanianli@ThinkCentre:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ vi Makefile huanianli@ThinkCentre:~/workspace/kaiba$ make cp foo.py foo && chmod +x foo huanianli@ThinkCentre:~/workspace/kaiba$ ls foo foo.py Makefile README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git add Makefile huanianli@ThinkCentre:~/workspace/kaiba$ git commit -m "HuanianLi: Add Makefile" [master 3609dff] HuanianLi: Add Makefile1 file changed, 9 insertions(+)create mode 100644 Makefile huanianli@ThinkCentre:~/workspace/kaiba$ git log commit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md huanianli@ThinkCentre:~/workspace/kaiba$ git branch -a * masterremotes/origin/master huanianli@ThinkCentre:~/workspace/kaiba$ git push Username for 'https://github.com': HuanianLi Password for 'https://HuanianLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 382 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/HuanianLi/kaiba.git640f6f6..3609dff master -> master huanianli@ThinkCentre:~/workspace/kaiba$

    這時(shí)候, HuanianLi的master里包含了3個(gè)commits, 而DaxiangLi的master里包含了2個(gè)commits, dev分支里包含了3個(gè)commits。 那么,如果DaxiangLi的dev分支里的top commit (254347c) 被合并到HuanianLi的master分支的時(shí)候,這一commit可能成為top commit, 也就是第4個(gè)commit,當(dāng)然也可能成為第3個(gè)commit。

    1 --- HuanianLi's master branch --- 2 commit 3609dff HuanianLi: Add Makefile 3 commit 640f6f6 DaxiangLi: Add foo.py 4 commit c0bd2ed Initialize the project by adding README.md 5 6 --- DaxiangLi's master branch --- 7 commit 640f6f6 DaxiangLi: Add foo.py 8 commit c0bd2ed Initialize the project by adding README.md 9 10 --- DaxiangLi's dev branch --- 11 commit 254347c DaxiangLi: Add checking to foo.py 12 commit 640f6f6 DaxiangLi: Add foo.py 13 commit c0bd2ed Initialize the project by adding README.md 14 15 # 16 # After commit 7bab5c2 from DaxiangLi's dev branch 17 # is merged into HuanianLi's master branch 18 # 19 --- HuanianLi's master branch looks like --- 20 commit 254347c DaxiangLi: Add checking to foo.py 21 commit 3609dff HuanianLi: Add Makefile 22 commit 640f6f6 DaxiangLi: Add foo.py 23 commit c0bd2ed Initialize the project by adding README.md 24 25 # OR 26 commit 3609dff HuanianLi: Add Makefile 27 commit 254347c DaxiangLi: Add checking to foo.py 28 commit 640f6f6 DaxiangLi: Add foo.py 29 commit c0bd2ed Initialize the project by adding README.md

    105.10 HuanianLi再次檢查DaxiangLi的PR, 發(fā)現(xiàn)只有一個(gè)commit了,而且與他的master分支沒有沖突,決定merge!!

    點(diǎn)擊Merge pull request按鈕右邊的向下箭頭,我們可看到有三種Merge方式,這一次,我們將采用Rebase and merge。

    ?

    105.11 HuanianLi采用Rebase and merge選項(xiàng)處理DaxiangLi的PR

    Merge 完畢后,在HuanianLi的GitHub空間可以看到

    HuanianLi重新clone一下kaiba.git, 通過git檢查Merge:

    huanianli@ThinkCentre:~/workspace$ git clone https://github.com/HuanianLi/kaiba.git Cloning into 'kaiba'... remote: Counting objects: 12, done. remote: Compressing objects: 100% (9/9), done. remote: Total 12 (delta 2), reused 9 (delta 1), pack-reused 0 Unpacking objects: 100% (12/12), done. Checking connectivity... done. huanianli@ThinkCentre:~/workspace$ cd kaiba huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md huanianli@ThinkCentre:~/workspace/kaiba$

    ?

    106 - DaxiangLi 需要重新sync一下master (這一過程我們?cè)谇懊娼榻B過,按照基本套路執(zhí)行即可)

    daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branch * devmaster daxiangli@ThinkPad:~/workspace/kaiba$ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branchdev * master daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote -v origin https://github.com/DaxiangLi/kaiba.git (fetch) origin https://github.com/DaxiangLi/kaiba.git (push) upstream https://github.com/HuanianLi/kaiba.git (fetch) upstream https://github.com/HuanianLi/kaiba.git (push) daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream remote: Counting objects: 6, done. remote: Compressing objects: 100% (5/5), done. remote: Total 6 (delta 2), reused 3 (delta 1), pack-reused 0 Unpacking objects: 100% (6/6), done. From https://github.com/HuanianLi/kaiba640f6f6..27aca2b master -> upstream/master daxiangli@ThinkPad:~/workspace/kaiba$daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master -> FETCH_HEAD daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git rebase upstream/master First, rewinding head to replay your work on top of it... Fast-forwarded master to upstream/master. daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin master Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 6, done. Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 747 bytes | 0 bytes/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/DaxiangLi/kaiba.git640f6f6..27aca2b master -> master daxiangli@ThinkPad:~/workspace/kaiba$

    注意: 這里用到的關(guān)鍵命令是:

    1 $ git checkout master 2 $[ git remote add upstream https://github.com/HuanianLi/kaiba.git ] 3 $ git remote -v 4 $ git remote update 5 $ git fetch upstream master 6 $ git rebase upstream/master 7 $ git push origin master

    ?

    107 - DaxiangLi將dev分支也sync一下(跟origin master同步即可),以便下一次做開發(fā)

    daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branchdev * master daxiangli@ThinkPad:~/workspace/kaiba$ git checkout dev Switched to branch 'dev' Your branch is up-to-date with 'origin/dev'. daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branch * devmaster daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 254347cbe57fa043ffcc774e26eabdcd63ea8b30 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git fetch origin master From https://github.com/DaxiangLi/kaiba* branch master -> FETCH_HEAD daxiangli@ThinkPad:~/workspace/kaiba$ git rebase origin/master First, rewinding head to replay your work on top of it... daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin dev Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': To https://github.com/DaxiangLi/kaiba.git! [rejected] dev -> dev (non-fast-forward) error: failed to push some refs to 'https://github.com/DaxiangLi/kaiba.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin dev --force Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Total 0 (delta 0), reused 0 (delta 0) To https://github.com/DaxiangLi/kaiba.git+ 254347c...27aca2b dev -> dev (forced update) daxiangli@ThinkPad:~/workspace/kaiba$

    注意: 這里用到的關(guān)鍵命令是:

    1 $ git checkout dev 2 $ git fetch origin master 3 $ git rebase origin/master 4 $ git push origin dev --force

    到這里,場(chǎng)景一我們就介紹完畢了, 接下來介紹場(chǎng)景二


    場(chǎng)景二: PR Review過程中upstream有更新, 而且需要解決沖突

    201 - DaxiangLi第一次更改foo.py

    daxiangli@ThinkPad:~$ daxiangli@ThinkPad:~$ rm -rf workspace/kaiba daxiangli@ThinkPad:~$ cd workspace daxiangli@ThinkPad:~/workspace$ daxiangli@ThinkPad:~/workspace$ git clone https://github.com/DaxiangLi/kaiba.git Cloning into 'kaiba'... remote: Counting objects: 12, done. remote: Compressing objects: 100% (8/8), done. remote: Total 12 (delta 2), reused 12 (delta 2), pack-reused 0 Unpacking objects: 100% (12/12), done. Checking connectivity... done. daxiangli@ThinkPad:~/workspace$ cd kaiba daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote -v origin https://github.com/DaxiangLi/kaiba.git (fetch) origin https://github.com/DaxiangLi/kaiba.git (push) daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote -v origin https://github.com/DaxiangLi/kaiba.git (fetch) origin https://github.com/DaxiangLi/kaiba.git (push) upstream https://github.com/HuanianLi/kaiba.git (fetch) upstream https://github.com/HuanianLi/kaiba.git (push) daxiangli@ThinkPad:~/workspace/kaiba$daxiangli@ThinkPad:~/workspace/kaiba$ git branch * master daxiangli@ThinkPad:~/workspace/kaiba$ git branch -a * masterremotes/origin/HEAD -> origin/masterremotes/origin/devremotes/origin/master daxiangli@ThinkPad:~/workspace/kaiba$ git checkout dev Branch dev set up to track remote branch dev from origin. Switched to a new branch 'dev' daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branch * devmaster daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ vi foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git diff foo.py diff --git a/foo.py b/foo.py index 84b0787..44635b7 100644 --- a/foo.py +++ b/foo.py @@ -7,10 +7,8 @@ def main(argc, argv):sys.stderr.write("Usage: %s <num>\n" % argv[0])return (-1)- i = 0 - while i < int(argv[1]): + for i in range(int(argv[1])):print "%02d: Hello World." % i - i += 1return (0)daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git add foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git commit -m "DaxiangLi: Update foo.py to use for instead of while" [dev 099cfc7] DaxiangLi: Update foo.py to use for instead of while1 file changed, 1 insertion(+), 3 deletions(-) daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 099cfc7de963a4cbe8ceb7088a710bdb4815dd9d Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 16:57:09 2018 +0800DaxiangLi: Update foo.py to use for instead of whilecommit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin dev Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 340 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/DaxiangLi/kaiba.git27aca2b..099cfc7 dev -> dev daxiangli@ThinkPad:~/workspace/kaiba$

    ?

    202 - DaxiangLi第二次更改foo.py

    提交更新到remotes/origin/dev分支后不滿意,于是做第二次修改再提交,這里為了保持只有一個(gè)commit, 將會(huì)用到

    $ git commit -a -m "comments" --amend

    全部修改過程如下:

    daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 099cfc7de963a4cbe8ceb7088a710bdb4815dd9d Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 16:57:09 2018 +0800DaxiangLi: Update foo.py to use for instead of whilecommit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git diff daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ vi foo.py daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git add foo.py daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git commit -m "DaxiangLi: Update foo.py to use 'for' instead of 'while'" --amend [dev 3b9d809] DaxiangLi: Update foo.py to use 'for' instead of 'while'Date: Thu Jul 26 16:57:09 2018 +08001 file changed, 2 insertions(+), 4 deletions(-) daxiangli@ThinkPad:~/workspace/kaiba$ git log commit 3b9d809f249abfd4d5a53d35006d63f341efbacf Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 16:57:09 2018 +0800DaxiangLi: Update foo.py to use 'for' instead of 'while'commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push origin dev --force Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 357 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/DaxiangLi/kaiba.git+ 099cfc7...3b9d809 dev -> dev (forced update) daxiangli@ThinkPad:~/workspace/kaiba$

    ?

    203 - DaxiangLi創(chuàng)建一個(gè)PR

    ?

    204 - HuanianLi更新foo.py并提交到upstream/master分支

    huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ vi foo.py huanianli@ThinkCentre:~/workspace/kaiba$ git diff foo.py diff --git a/foo.py b/foo.py index 84b0787..a9aa6fe 100644 --- a/foo.py +++ b/foo.py @@ -5,14 +5,14 @@ import sysdef main(argc, argv):if argc != 2:sys.stderr.write("Usage: %s <num>\n" % argv[0]) - return (-1) + return -1i = 0while i < int(argv[1]):print "%02d: Hello World." % ii += 1- return (0) + return 0if __name__ == '__main__':argv = sys.argv huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git commit -a -m "HuanianLi: Update foo.py to use return N instead of return (N)" [master c5221d8] HuanianLi: Update foo.py to use return N instead of return (N)1 file changed, 2 insertions(+), 2 deletions(-) huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git log commit c5221d81c91d45cda15e33c3bf0e82874d7fcc97 Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 17:29:22 2018 +0800HuanianLi: Update foo.py to use return N instead of return (N)commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li <bjlhn@126.com> Date: Thu Jul 26 11:39:22 2018 +0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li <huanian.li@gmail.com> Date: Thu Jul 26 13:54:01 2018 +0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li <bjlhn@126.com> Date: Wed Jul 25 18:15:38 2018 +0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li <huanian.li@gmail.com> Date: Wed Jul 25 16:21:43 2018 +0800Initialize the project by adding README.md huanianli@ThinkCentre:~/workspace/kaiba$ huanianli@ThinkCentre:~/workspace/kaiba$ git push origin master Username for 'https://github.com': HuanianLi Password for 'https://HuanianLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 325 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/HuanianLi/kaiba.git27aca2b..c5221d8 master -> master huanianli@ThinkCentre:~/workspace/kaiba$

    205 - DaxiangLi再次更新foo.py,故意制造一個(gè)沖突

    daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream remote: Counting objects: 3, done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/HuanianLi/kaiba* [new branch] master -> upstream/master daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git branch -a * devmasterremotes/origin/HEAD -> origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/masterdaxiangli@ThinkPad:~/workspace/kaiba$ vi foo.py daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git commit -a --amend [dev 924729d] DaxiangLi: Update foo.py to use 'for' instead of 'while'Date: Thu Jul 26 16:57:09 2018 +08001 file changed, 3 insertions(+), 5 deletions(-)daxiangli@ThinkPad:~/workspace/kaiba$ git diff remotes/origin/master.. diff --git a/foo.py b/foo.py index 84b0787..b1070a5 100644 --- a/foo.py +++ b/foo.py @@ -5,12 +5,10 @@ import sysdef main(argc, argv):if argc != 2:sys.stderr.write("Usage: %s <num>\n" % argv[0]) - return (-1) + return (-11)- i = 0 - while i < int(argv[1]): - print "%02d: Hello World." % i - i += 1 + for i in range(int(argv[1])): + print "%02d: Hello World." % (i + 1)return (0)daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git diff remotes/upstream/master.. diff --git a/foo.py b/foo.py index a9aa6fe..b1070a5 100644 --- a/foo.py +++ b/foo.py @@ -5,14 +5,12 @@ import sysdef main(argc, argv):if argc != 2:sys.stderr.write("Usage: %s <num>\n" % argv[0]) - return -1 + return (-11)- i = 0 - while i < int(argv[1]): - print "%02d: Hello World." % i - i += 1 + for i in range(int(argv[1])): + print "%02d: Hello World." % (i + 1)- return 0 + return (0)if __name__ == '__main__':argv = sys.argv daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git push --force Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 362 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/DaxiangLi/kaiba.git+ 671404d...924729d dev -> dev (forced update) daxiangli@ThinkPad:~/workspace/kaiba$
    • 制造的沖突是故意將return (-1)改成return (-11)

    • 接下來我們發(fā)現(xiàn),PR上就會(huì)顯示有沖突了!!

    ?

    • ?沖突的細(xì)節(jié)在于foo.py的第8行

    ?

    好吧,接下來DaxiangLi就需要去解決沖突了!

    ?

    206 - DaxiangLi解決沖突 (P.S. 解決沖突不是很容易,請(qǐng)仔細(xì)看)

    206.1 創(chuàng)建一個(gè)臨時(shí)分支dev-scratch為了演示得更清晰,這里故意刪除舊的空間,重新clone一遍,然后從頭開始

    daxiangli@ThinkPad:~/workspace/kaiba$ git checkout -b dev-scratch dev Switched to a new branch 'dev-scratch'

    ?

    206.2 給臨時(shí)分支dev-scratch添加upstream的repo

    daxiangli@ThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git

    ?

    206.3 讓臨時(shí)分支dev-scratch與upstream/master同步

    daxiangli@ThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 2), reused 2 (delta 1), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/HuanianLi/kaiba* [new branch] master -> upstream/master

    daxiangli@ThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master -> FETCH_HEAD

    daxiangli@ThinkPad:~/workspace/kaiba$ git merge upstream/master Auto-merging foo.py CONFLICT (content): Merge conflict in foo.py Automatic merge failed; fix conflicts and then commit the result.

    ?

    206.4 在臨時(shí)分支dev-scratch里合并沖突

    daxiangli@ThinkPad:~/workspace/kaiba$ git add foo.py daxiangli@ThinkPad:~/workspace/kaiba$ git commit -m "DaxiangLi: Merge confilict in foo.py" [dev-scratch c9af088] DaxiangLi: Merge confilict in foo.py

    ?

    206.5 將本地的臨時(shí)分支dev-scratch與本地開發(fā)分支dev做比較

    daxiangli@ThinkPad:~/workspace/kaiba$ git diff dev..dev-scratch

    ?

    206.6 切換到本地開發(fā)分支dev

    daxiangli@ThinkPad:~/workspace/kaiba$ git checkout dev Switched to branch 'dev' Your branch is up-to-date with 'origin/dev'.

    ?

    206.7 將臨時(shí)分支dev-scratch合并到開發(fā)分支dev

    daxiangli@ThinkPad:~/workspace/kaiba$ git merge --squash dev-scratch Updating 924729d..c9af088 Fast-forward Squash commit -- not updating HEADfoo.py | 4 ++--1 file changed, 2 insertions(+), 2 deletions(-)

    daxiangli@ThinkPad:~/workspace/kaiba$ git commit -a --amend [dev 5055a77] DaxiangLi: Update foo.py to use 'for' instead of 'while'Date: Thu Jul 26 16:57:09 2018 +08001 file changed, 4 insertions(+), 6 deletions(-) daxiangli@ThinkPad:~/workspace/kaiba$ daxiangli@ThinkPad:~/workspace/kaiba$ git diff dev..dev-scratch daxiangli@ThinkPad:~/workspace/kaiba$

    ?

    206.8 把本地的開發(fā)dev強(qiáng)制推送到遠(yuǎn)端的開發(fā)dev

    daxiangli@ThinkPad:~/workspace/kaiba$ git push origin dev --force Username for 'https://github.com': DaxiangLi Password for 'https://DaxiangLi@github.com': Counting objects: 3, done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 373 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/DaxiangLi/kaiba.git+ 924729d...5055a77 dev -> dev (forced update)

    ?

    206.9 刪除本地的臨時(shí)分支dev-scratch

    daxiangli@ThinkPad:~/workspace/kaiba$ git branch dev-scratch -D Deleted branch dev-scratch (was c9af088).

    OKAY, 沖突解決完成! 重新刷新PR, 發(fā)現(xiàn)沖突已經(jīng)不存在啦。。。

    ?

    207 - HuanianLi再次檢查PR,發(fā)現(xiàn)沒有沖突,將代碼Rebase and merge

    208 - DaxiangLi重新sync遠(yuǎn)端的master分支

    • 使用下面一組命令即可 (其中, [*]為關(guān)鍵命令)
    1 [ ] $ git branch 2 [*] $ git checkout master 3 [ ] $ git branch 4 [ ] $ git log 5 [*] $ git remote add upstream https://github.com/HuanianLi/kaiba.git 6 [ ] $ git remote -v 7 [ ] $ git remote update 8 [*] $ git fetch upstream master 9 [*] $ git rebase upstream/master 10 [ ] $ git log 11 [ ] $ git diff remotes/origin/master.. 12 [*] $ git push origin master

    ?

    209 - DaxiangLi重新sync遠(yuǎn)端的dev分支 (前面其實(shí)已經(jīng)介紹過)

    • 使用下面的命令即可 (其中, [*]為關(guān)鍵命令)
    1 [*] $ git clone https://github.com/DaxiangLi/kaiba.git 2 [*] $ git checkout dev 3 [ ] $ git remote -v 4 [*] $ git remote add upstream https://github.com/HuanianLi/kaiba.git 5 [ ] $ git remote -v 6 [ ] $ git log 7 [ ] $ git remote update 8 [*] $ git fetch upstream master 9 [*] $ git rebase upstream/master 10 [ ] $ git log --graph 11 [*] $ git push origin dev --force

    說明: git remote update可以不做,直接使用git fetch upstream master也okay.


    總結(jié):

  • 從upstream fork出代碼空間后,總是創(chuàng)建一個(gè)dev分支并保存到遠(yuǎn)端比較好,這樣master分支用來與upstream保持同步,dev分支用來做開發(fā)
  • 提交PR的時(shí)候請(qǐng)?jiān)赿ev分支中總是保存一個(gè)用來被合作伙伴review的commit,如不小心提交了多個(gè)commit, 需要進(jìn)行合并,合并的方法是使用git rebase -i
  • 保持PR中只有一個(gè)commit的秘訣是使用git commit -a --amend,然后使用git push origin dev --force
  • 養(yǎng)成總是讓origin/master與upstream同步的好習(xí)慣
  • 不用總是讓origin/dev與upstream保持同步,如果PR中顯示有沖突就解決沖突,沒有就不用管,即使origin/dev與upstream不同步 (P.S. git沒有recommit功能,所以你無法總是把你的commit放置到top位置)
  • 當(dāng)一個(gè)PR被合并后,不妨也讓origin/dev分支與upstream同步,同步的秘訣還是git push origin dev --force
  • 可以認(rèn)為origin/dev分支是一個(gè)沙箱,可以用來隨便玩, 玩壞了大不了刪除遠(yuǎn)端的origin/dev分支再重新創(chuàng)建一個(gè);但是請(qǐng)認(rèn)真對(duì)待origin/master
  • 盡可能地使用git rebase upstream/master, 不使用git merge upstream/master, 在做同步的時(shí)候
  • 解決沖突請(qǐng)創(chuàng)建一個(gè)本地臨時(shí)分支dev-scratch, 然后將臨時(shí)分支合并到本地開發(fā)分支dev,合并的秘訣是使用 git merge --squash dev-scratch
  • 不需要的臨時(shí)分支dev-scratch用git branch dev-scratch -D刪除,養(yǎng)成不留垃圾分支的好習(xí)慣
  • 不小心關(guān)掉一個(gè)PR可以Re-open, 但是盡量不要在review的過程中刪除被review的commit,那樣會(huì)導(dǎo)致PR被自動(dòng)關(guān)閉

  • 參考資料:

    • Git教程
    • A successful Git branching model
    • 怎樣在github上協(xié)同開發(fā)
    • 使用git和github進(jìn)行協(xié)同開發(fā)流程
    • GitHub實(shí)現(xiàn)多人協(xié)同提交代碼并且權(quán)限分組管理

    轉(zhuǎn)載于:https://www.cnblogs.com/idorax/p/9366035.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的GitHub多人协作简明教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    在线观看www. | 九九热在线观看视频 | 国产精品综合在线观看 | 久久久免费毛片 | 国产一级精品视频 | 国产区在线视频 | 成人午夜电影免费在线观看 | 久草久| 中文字幕在线观看网 | 黄色特一级片 | 午夜精品一二三区 | 日日操日日 | 91视频免费看网站 | 久久综合综合久久综合 | 免费视频网 | 午夜色影院 | 亚洲精品乱码久久久久久 | 一区二区精品视频 | 日韩免费播放 | 韩国av电影网 | 国产99久久九九精品免费 | av在线看网站 | 97精品国产97久久久久久粉红 | 在线国产精品视频 | 98精品国产自产在线观看 | 青青草在久久免费久久免费 | 丁香婷婷综合网 | 99精品国产一区二区三区麻豆 | 亚洲免费高清视频 | 亚洲欧美综合精品久久成人 | 亚洲免费精彩视频 | 一区在线观看视频 | 日韩免费观看视频 | 天天爽人人爽 | 国产精品久久久久久一区二区三区 | 日韩在线短视频 | 亚洲毛片久久 | 国产精品人人做人人爽人人添 | 色资源网在线观看 | 日韩免费播放 | 欧美日韩视频一区二区三区 | 国内精品久久久久影院男同志 | 狠狠网站 | 国产精品成人自产拍在线观看 | av免费在线观 | 国产在线国偷精品产拍 | 久久人人爽爽人人爽人人片av | 亚洲黄电影 | 亚洲精品97 | 草久草久 | 亚洲精品午夜视频 | 午夜av一区二区三区 | 亚洲视频第一页 | 成人毛片一区 | 精品国产一区二区三区四区在线观看 | 国产亚洲激情视频在线 | 色综合中文字幕 | 天天摸天天舔天天操 | 激情中文在线 | 色婷婷福利 | 成人精品999 | 91最新国产| 中文字幕一二三区 | www日韩高清| 亚洲高清视频在线观看免费 | 中文字幕在线视频一区二区三区 | 国产精品综合久久 | 女人18片| 久久久久| www国产亚洲精品久久网站 | 久久久久久久久久电影 | 中文字幕一区在线观看视频 | 69av在线播放 | 亚洲激情 | 国产分类视频 | 亚洲精品88欧美一区二区 | 三级黄色在线 | 麻豆va一区二区三区久久浪 | 日韩精品在线一区 | 亚洲国产av精品毛片鲁大师 | 亚洲深夜影院 | 亚洲视频在线观看网站 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 国产成人久久av | 日产乱码一二三区别免费 | 欧美激情精品久久久久久免费 | 欧美精品久久久久久久久免 | 中文区中文字幕免费看 | 九九在线免费视频 | 中文字幕黄色 | 91大神免费视频 | 国产黄色高清 | 亚洲资源在线网 | 欧美一二三在线 | 97在线影院 | 日日弄天天弄美女bbbb | 最近中文字幕视频网 | 亚洲成人黄色在线观看 | 成人看片 | 美女福利视频一区二区 | 日韩丝袜视频 | 69亚洲精品| 波多野结衣一区三区 | 日韩综合在线观看 | 日韩欧美成 | 亚洲2019精品| 日韩精品中文字幕久久臀 | 欧美一二区视频 | 久久无码av一区二区三区电影网 | a视频在线观看 | 天天草天天| 99视频在线免费播放 | 欧美精品久久久久久久免费 | 国产97超碰 | 欧美成人一二区 | 亚洲japanese制服美女 | 五月激情六月丁香 | 91成年人网站 | 亚洲毛片久久 | 午夜影视剧场 | 最新免费av在线 | 精品影院 | 天天爱天天操天天爽 | 在线观看视频精品 | 亚洲成年人av | 久久精品高清 | 九九热只有精品 | 91精品久久香蕉国产线看观看 | 激情综合网婷婷 | 亚洲电影免费 | 国产欧美三级 | 中国一级片在线 | 香蕉视频久久久 | 西西人体4444www高清视频 | 久久线视频 | 日日激情| 天天操夜操视频 | 中文字幕日韩在线播放 | 成人午夜毛片 | 国产精品久久久久久久久久妇女 | 日韩av电影中文字幕在线观看 | 久草资源免费 | 超碰资源在线 | 午夜精品福利一区二区 | 蜜臀av免费一区二区三区 | 久久久久久毛片精品免费不卡 | avlulu久久精品 | 久久综合免费视频 | 福利视频导航网址 | 久久九九网站 | 人人天天夜夜 | 国产精品99久久久久久久久久久久 | 五月色丁香 | 亚洲精品99久久久久中文字幕 | 免费黄色网址大全 | 91视频在线观看下载 | 久久久久国产免费免费 | 亚洲国产成人精品在线观看 | 亚洲综合成人av | 国产精品免费久久久久影院仙踪林 | 天天摸日日摸人人看 | 亚洲免费成人 | 五月天激情视频 | 色香网 | 精品久久1 | 草久中文字幕 | 欧美日韩中文国产一区发布 | 国产中文字幕在线看 | 色综合久久久久综合 | 日韩一区二区三区免费电影 | 欧美激情第28页 | 亚洲一区二区视频 | 亚洲天堂毛片 | 麻豆激情电影 | 日日夜夜网站 | 国产精品一区二区三区在线免费观看 | 亚洲国产精品激情在线观看 | 免费成人在线观看视频 | 欧美日韩国产xxx | 日韩三区在线 | 成人免费在线视频 | 特级片免费看 | 超碰在线人 | 69夜色精品国产69乱 | 人人澡人人干 | 久草在线国产 | 中文字幕欧美日韩va免费视频 | 国产精品欧美久久久久无广告 | 日韩激情一二三区 | 狠狠插狠狠干 | 一区二区网| 97超碰成人在线 | 三级在线视频播放 | 国产成人亚洲精品自产在线 | www.天天草 | 中文资源在线观看 | 亚洲国产精品人久久电影 | 在线观看国产福利片 | 欧美成人在线免费观看 | 激情在线五月天 | 麻豆国产精品一区二区三区 | 亚洲精品欧美成人 | 在线视频欧美亚洲 | 免费观看黄 | 国产一线在线 | 国产品久精国精产拍 | 国内精品久久久久久 | 亚洲在线激情 | 国产不卡在线看 | 日本久草电影 | 五月综合婷 | 成av人电影 | 日韩欧美在线一区二区 | 久久草草热国产精品直播 | 狠狠综合网 | 97超碰在线资源 | 91成人在线观看高潮 | 在线国产精品一区 | 精品国产乱码久久久久久1区2匹 | 国产成人精品一区二区三区免费 | 人人干人人艹 | 日韩精品免费 | 久久久国产精品视频 | 人人爽人人香蕉 | 男女拍拍免费视频 | 黄色av一区二区三区 | 欧美aa一级片 | 日本黄色a级大片 | 欧美乱熟臀69xxxxxx | 99婷婷狠狠成为人免费视频 | a在线免费观看视频 | av免费电影在线观看 | 激情视频在线观看网址 | 五月婷婷久久丁香 | 在线观看国产日韩欧美 | 成年人免费在线播放 | 不卡精品 | 久久久久国产一区二区三区四区 | 五月丁香 | 成人免费在线视频观看 | 久久成人高清 | 国语精品久久 | 亚洲资源视频 | 久草精品在线 | 一级全黄毛片 | 91mv.cool在线观看 | 午夜av免费在线观看 | 亚洲视频免费在线观看 | 欧美日韩国产一区 | 国产成人99久久亚洲综合精品 | 狠狠狠色 | 亚洲午夜久久久综合37日本 | 在线观看国产一区二区 | 精品视频| 99久久精品视频免费 | 久久dvd | 久久精品xxx| 91免费黄视频 | 国产精品久久婷婷六月丁香 | 91av短视频| 欧美性色xo影院 | 视频1区2区 | 精品国产乱码久久久久 | 黄色免费国产 | 国产精品久久久久免费 | 视频一区视频二区在线观看 | 在线观看你懂的网址 | 69国产精品视频免费观看 | 久久这里精品视频 | 国产精品婷婷午夜在线观看 | 婷婷丁香色| 韩国av一区二区 | 成片人卡1卡2卡3手机免费看 | 99亚洲天堂 | 免费看国产视频 | 狠狠躁18三区二区一区ai明星 | 91成人网在线观看 | 丁香六月激情婷婷 | 久久国产乱 | 日本久久中文 | 婷婷综合视频 | 国产视频中文字幕在线观看 | 国产亚州精品视频 | 黄色大片中国 | 亚洲视频axxx | 免费三级网 | 精品在线观看国产 | 国产一二三在线视频 | www免费网站在线观看 | 国产不卡高清 | 日韩大片在线看 | 婷婷五天天在线视频 | 在线天堂视频 | 在线观看一级视频 | 久av在线 | 国产一区二区三区免费视频 | 91在线91 | 国产精品久久久久久久妇 | 精品国产欧美一区二区 | 国产亚洲精品免费 | 国产精品久久久久久久久免费 | 国产五十路毛片 | 麻豆久久一区 | 国产香蕉av| 开心色婷婷 | 国产婷婷精品 | 黄色小网站在线观看 | 国产免费不卡av | 一本一道久久a久久精品蜜桃 | 国产欧美中文字幕 | 日韩av高潮| 激情动态| 午夜日b视频| 欧美日韩国产mv | 97免费在线观看视频 | 99久久精品国产观看 | 手机av网站 | 精品国产自 | 香蕉视频在线免费 | 97电影院在线观看 | 欧美一区二区三区激情视频 | 欧美日韩精品免费观看 | 西西4444www大胆视频 | 成人 亚洲 欧美 | 最新中文字幕在线观看视频 | 天天射天天干天天 | 国产成人99久久亚洲综合精品 | 日韩最新av在线 | 国产精品视频999 | 久久久免费精品视频 | av在线一二三区 | 日本99精品 | 欧美性做爰猛烈叫床潮 | 国产成人一区二 | 午夜精品一区二区三区可下载 | 欧美a在线免费观看 | zzijzzij亚洲成熟少妇 | 国产精品午夜久久久久久99热 | 久久99久久99精品免观看粉嫩 | 久久综合亚洲鲁鲁五月久久 | 一区精品久久 | 97精品欧美91久久久久久 | 国产麻豆果冻传媒在线观看 | 欧美午夜久久久 | 欧美日韩观看 | 九九视频在线 | 色视频网页 | 欧美一性一交一乱 | 日韩性片 | 国产精品精品久久久久久 | 日韩资源在线播放 | 97国产大学生情侣酒店的特点 | 国产成人久久精品一区二区三区 | va视频在线观看 | 久久久蜜桃 | 亚洲精品看片 | 日韩理论在线视频 | 麻豆国产精品永久免费视频 | av高清免费在线 | 国产黄色片免费 | 国模精品一区二区三区 | 韩国av永久免费 | 日韩成人免费在线观看 | 国产99久久精品一区二区永久免费 | 国产区精品在线 | 国产在线观看91 | 日本丶国产丶欧美色综合 | 人人插人人玩 | 91欧美精品 | 夜夜躁狠狠燥 | 国内视频在线观看 | 香蕉视频最新网址 | 五月天激情视频 | 色婷婷久久一区二区 | 91在线中文字幕 | 欧美成亚洲 | 亚洲精品黄色在线观看 | 精品在线视频一区 | 超碰在线色 | 麻豆国产电影 | 久久福利综合 | 欧美激情精品久久久久久变态 | 国产精品免费久久久久久 | 国产精品视频在线观看 | av久久在线 | 久久精品视频在线观看免费 | 激情五月开心 | 99爱视频在线观看 | 久久久精品国产一区二区三区 | www.com操| 色a资源在线 | 免费看国产视频 | 亚洲一区天堂 | 在线av资源 | 青青草国产成人99久久 | 91麻豆精品91久久久久同性 | 久久美女免费视频 | www99精品 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲1级片 | 国产福利电影网址 | 亚洲精品午夜久久久 | 激情久久小说 | 免费日韩 精品中文字幕视频在线 | 久草在线在线视频 | 中文国产成人精品久久一 | 97精品国产一二三产区 | 成人永久免费 | 视频二区| 人人澡人| 在线免费观看黄色小说 | 色婷婷激情电影 | 国产高清av | 91精品1区 | 国产精品免费观看网站 | 精品91| 五月丁色 | 国产久草在线观看 | 91xav| 91在线porny国产在线看 | 中文字幕日韩精品有码视频 | 激情欧美一区二区免费视频 | 精品久久久久久久久久 | 韩国中文三级 | 欧美专区国产专区 | 91av免费观看 | 国产精品成人一区二区三区吃奶 | 麻豆传媒在线视频 | 国产精品自拍av | 97色在线视频 | 成人一区不卡 | 免费91在线 | 精品福利网站 | 亚洲欧美国产精品 | 日本视频网 | 一区二区三区免费在线 | 日批视频在线观看免费 | 操操碰 | 国产精品福利无圣光在线一区 | 日韩精品字幕 | 亚洲精品网址在线观看 | 97超碰人 | 亚洲日本色 | 日韩中文字幕国产 | 日韩精品免费在线视频 | 波多野结衣电影一区二区三区 | 日本公乱妇视频 | 国产一级片直播 | 久久国产精品免费 | 日韩午夜高清 | 国产亚洲一区二区在线观看 | www.五月天 | 日韩在线视频网站 | 亚洲欧洲视频 | 黄色动态图xx | 97超碰人 | 亚洲精品国偷自产在线91正片 | 正在播放一区二区 | 中文字幕在线观看你懂的 | 欧美性色xo影院 | 五月婷婷激情五月 | 日韩欧美视频一区二区 | 婷婷综合亚洲 | 国产精品一区二区三区在线免费观看 | 色婷婷激情电影 | 久久一级电影 | 日韩黄视频 | 草久中文字幕 | 国产一区二区影院 | 免费福利影院 | 国产主播大尺度精品福利免费 | 国产精品精品国产婷婷这里av | 91网页版在线观看 | 国产高清日韩 | 久久精品三级 | 色福利网站 | 欧美一二三区在线观看 | 中文字幕区 | 天天操天天色天天射 | 国产亚洲欧美日韩高清 | 日批视频在线播放 | 亚洲精品合集 | 国产一区免费 | 欧美怡红院视频 | 制服丝袜亚洲 | 人人草网站 | 中文字幕不卡在线88 | 久久99免费观看 | 人人干97 | 8x成人在线 | 欧美日韩中文字幕综合视频 | 天天操天天操天天爽 | 午夜丁香网 | 99久久婷婷国产综合亚洲 | 亚洲精品国产高清 | 99久久精品免费看国产一区二区三区 | 日本h视频在线观看 | 韩国三级一区 | 亚洲成人黄色在线观看 | 国产原创av在线 | 欧美三级免费 | 摸bbb搡bbb搡bbbb| 精品影院一区二区久久久 | 欧美日韩中文字幕综合视频 | 久久视频免费 | 日韩av电影中文字幕在线观看 | 久久久久久久久久久精 | 亚洲精品自在在线观看 | 婷婷在线免费观看 | 色偷偷88888欧美精品久久久 | 国产韩国精品一区二区三区 | 久久久综合九色合综国产精品 | 一区二区三区在线免费观看 | 精品国产一区二区三区久久久久久 | 精品久久久久免费极品大片 | 五月综合激情婷婷 | 伊人国产视频 | 欧美精品久久久久久久久老牛影院 | 国产日韩视频在线播放 | 久久第四色 | 97在线看片| 久久免费黄色网址 | 免费在线观看av片 | 人人插人人草 | 久草免费在线观看 | 91精品秘密在线观看 | 狠狠的操狠狠的干 | 久久久91精品国产一区二区精品 | 国产成人一区二区三区在线观看 | 欧美一二三专区 | 麻豆手机在线 | 亚洲丝袜中文 | 特黄免费av| 日韩午夜电影院 | 久久久久久久久久久久久久电影 | 不卡的av| 久久九九国产视频 | 毛片一级免费一级 | 91视视频在线直接观看在线看网页在线看 | 九九热视频在线 | 337p西西人体大胆瓣开下部 | 国产精品久久电影网 | 日日草夜夜操 | 日韩在线观看中文 | 亚洲精品视频在线播放 | 国产精品婷婷午夜在线观看 | 欧美日韩高清在线 | 国产精品都在这里 | 啪啪午夜免费 | 色小说av| 日韩欧美国产视频 | 国产九九热 | 国产精品麻豆一区二区三区 | 亚洲成a人片综合在线 | 天堂av免费在线 | 91亚洲国产成人久久精品网站 | 亚洲欧美在线综合 | 亚洲a资源 | 黄色软件在线观看 | 欧美人zozo | 免费在线观看日韩视频 | 探花视频在线观看免费版 | 久久视频这里有精品 | 色婷婷成人网 | 91视频传媒 | av中文电影| 欧美另类激情 | 综合网久久 | 国产一级大片免费看 | 日韩国产精品久久久久久亚洲 | 国产午夜麻豆影院在线观看 | 97精品久久 | 99色在线观看视频 | 国模精品一区二区三区 | 在线免费观看国产黄色 | 在线免费视频一区 | 免费观看www小视频的软件 | 国产精品毛片完整版 | 91久久久久久久一区二区 | 久草在线久 | 国产成人av福利 | 欧美 日韩 性 | 日本久久久亚洲精品 | 国产丝袜制服在线 | 国产精品久久久久久av | 亚洲精品合集 | 精品国精品自拍自在线 | 99视频这里只有 | 97色在线观看 | 日本精品视频免费观看 | 337p日本大胆噜噜噜噜 | 国产一级特黄电影 | 嫩草av在线| 亚州欧美精品 | 蜜桃久久久 | 久久五月婷婷丁香社区 | 成年人国产视频 | 96精品在线 | 久久毛片高清国产 | 91九色在线 | 一区二区三区日韩视频在线观看 | 精品国产综合区久久久久久 | 婷婷伊人综合 | 久久久久久久国产精品视频 | 成人黄色电影在线播放 | 亚洲影视九九影院在线观看 | 最新高清无码专区 | 最近免费在线观看 | 丝袜美女在线观看 | 亚洲精品视频在线观看免费视频 | 在线播放 日韩专区 | 国产手机在线播放 | 九九九九九九精品任你躁 | 久久夜夜夜| 久久欧美综合 | 亚洲精品国产精品久久99 | 日韩在线不卡视频 | 久久免费激情视频 | 国产成人在线免费观看 | 99久久99久久精品国产片果冰 | 欧美性色综合网 | 色婷丁香| 808电影免费观看三年 | 中文字幕在线视频一区二区 | 亚洲美女视频在线 | 99精品一区 | 国产精品久久久久国产精品日日 | 黄色av成人在线观看 | 欧美调教网站 | 992tv在线观看 | 久久久久亚洲精品成人网小说 | 伊人一级 | 久久免费公开视频 | 日韩极品视频在线观看 | 蜜臀久久99精品久久久无需会员 | 国内精自线一二区永久 | 三级av中文字幕 | 成人av免费在线观看 | 免费观看成年人视频 | 五月天激情电影 | 三三级黄色片之日韩 | 国产一区在线不卡 | 国产精品网址在线观看 | 狠狠黄 | 精品免费视频123区 午夜久久成人 | 天天爱综合| 国产色一区| 亚洲一区美女视频在线观看免费 | 午夜久久久久久久久久久 | 久久精品xxx | 国产日本在线播放 | 亚洲美女精品 | 精品自拍网| 黄色精品一区二区 | 国产精品视频不卡 | 69精品久久| 国产日韩欧美在线一区 | www日韩视频| 国产一级二级三级视频 | 亚洲毛片视频 | 人人干在线观看 | 在线观看视频97 | h视频日本 | 999毛片 | 亚洲精品在线免费播放 | 人人舔人人射 | 亚洲黄色av | 黄色av一区二区 | 伊人婷婷久久 | 欧美男女爱爱视频 | 99婷婷狠狠成为人免费视频 | 又色又爽又黄高潮的免费视频 | 日韩一二区在线观看 | 五月激情丁香婷婷 | 国产999视频 | 色在线高清 | 久久成人人人人精品欧 | 日韩精品偷拍 | 女人18片毛片90分钟 | 欧美9999| 国产精品久久久亚洲 | 色婷婷综合久久久 | 中文字幕精品三区 | 欧美一级高清片 | 欧美美女激情18p | www好男人 | 国产美女视频免费观看的网站 | 在线免费性生活片 | 日韩一区二区三区观看 | 亚洲国产精久久久久久久 | 欧美高清视频不卡网 | 成年人免费观看国产 | 精品在线亚洲视频 | 免费在线一区二区 | 麻豆极品 | 国产又粗又硬又长又爽的视频 | 欧美成年人在线视频 | 欧美日韩精品免费观看视频 | 欧美日韩综合在线 | 精品999国产 | 亚洲天堂色婷婷 | 婷婷狠狠操 | 正在播放国产一区二区 | 色偷偷88888欧美精品久久久 | 中文字幕资源在线观看 | 久久国产精品二国产精品中国洋人 | 一区在线播放 | 国产欧美三级 | 国产1区2区3区精品美女 | 中文字幕丝袜美腿 | 亚洲五月激情 | 亚洲精品一区二区三区在线观看 | 日本在线观看中文字幕无线观看 | 最近中文字幕国语免费高清6 | 中文字幕丝袜制服 | 亚洲一二三在线 | 久久艹人人 | 亚洲精品黄色片 | 成人污视频在线观看 | 国产精品毛片一区二区三区 | 欧美专区亚洲专区 | 欧美 亚洲 另类 激情 另类 | 天天翘av | japanesexxxxfreehd乱熟 | 国产女人免费看a级丨片 | 激情文学丁香 | 在线播放 日韩专区 | 高清久久久 | 91视频麻豆视频 | 欧美性高跟鞋xxxxhd | 永久免费精品视频 | 精品欧美乱码久久久久久 | 免费裸体视频网 | 黄色avwww| 久草.com| 国产成人中文字幕 | 一区二区三区免费播放 | 久精品视频免费观看2 | 午夜精品福利一区二区三区蜜桃 | 亚洲黄色在线播放 | 成人动态视频 | 黄色av电影在线观看 | 人人射人人爽 | 九热精品 | 国产精品网站一区二区三区 | 久草视频手机在线 | 久久久精品亚洲 | 日韩色高清 | 久草爱视频 | 色婷婷综合在线 | 亚洲黄色片在线 | 成年人在线免费看视频 | 亚洲日本精品视频 | 美女视频黄的免费的 | 日韩av免费一区 | 美女免费视频一区 | 天天草天天操 | 免费看三级黄色片 | 国产精品不卡在线观看 | 丁香花在线观看免费完整版视频 | 97超碰总站 | 992tv成人免费看片 | 久久久国产高清 | 国产精品久久久久久久午夜片 | 欧美日韩国产精品一区二区三区 | www在线观看国产 | 色999五月色 | 三级av黄色| 国产精品久久久久久久久搜平片 | 中文字幕 国产视频 | 麻豆一区二区三区视频 | 亚洲国产中文字幕在线视频综合 | 开心综合网 | 免费精品国产va自在自线 | 国产精品孕妇 | 97国产精品一区二区 | 精品资源在线 | 国产在线视频在线观看 | 亚洲精品视频免费 | 久久综合综合久久综合 | 国产偷国产偷亚洲清高 | 婷婷色在线资源 | 欧美色图一区 | 国产精品久久久av久久久 | 韩国一区二区在线观看 | 中文字幕中文字幕在线中文字幕三区 | 日韩中文久久 | 在线国产视频 | 欧美国产三区 | 在线视频 国产 日韩 | 国产成人在线播放 | 91免费观看视频网站 | 一区二区三区在线影院 | 免费视频你懂得 | 91插插视频 | 在线播放国产精品 | 日韩欧美一区二区三区视频 | 国产又粗又猛又爽又黄的视频先 | 色偷偷网站视频 | 少妇搡bbbb搡bbb搡忠贞 | 色网站在线免费观看 | 久久久在线观看 | 在线免费黄色毛片 | 欧美性脚交 | 亚洲视频axxx | 国产91在线免费视频 | 91香蕉视频在线 | 在线观看成人福利 | 99久久日韩精品视频免费在线观看 | 欧美国产视频在线 | 日韩r级电影在线观看 | 丁香婷婷色月天 | 欧美激情另类文学 | av看片在线观看 | 免费看黄视频 | 亚洲日本中文字幕在线观看 | 久爱综合 | 日本久久成人中文字幕电影 | 国内精品久久久久久久97牛牛 | 男女视频国产 | 免费高清av在线看 | 97色在线视频 | 99色在线观看 | 精品电影一区二区 | 国产91精品一区二区绿帽 | 成人作爱视频 | 日韩av在线免费播放 | 久久视频99 | 国产一级一级国产 | 中文字幕123区 | 免费精品 | 亚洲精品乱码久久久久久 | 中文字幕日韩国产 | av三级在线播放 | 91尤物国产尤物福利在线播放 | 欧美va在线观看 | 欧美aⅴ在线观看 | 操处女逼 | 久久精品91久久久久久再现 | 亚洲视频 视频在线 | 久久久亚洲精华液 | 丝袜制服综合网 | av网址aaa| 欧美91片| 欧美国产在线看 | 五月激情丁香婷婷 | 久热色超碰 | 日本不卡一区二区 | av在线8 | 黄污网站在线观看 | 最新中文字幕在线播放 | 久久午夜影视 | 亚洲精品乱码久久久久久久久久 | 日韩字幕在线观看 | 天天碰天天操视频 | 国产美女被啪进深处喷白浆视频 | 91麻豆操 | av电影久久 | 激情在线免费视频 | 亚洲精品女 | 中文字幕一区二区在线观看 | 天天操天天干天天干 | 最近日本中文字幕a | 免费av在线网站 | 日韩视频三区 | 97在线观看 | 久久色在线播放 | 97视频免费在线 | 在线免费黄色av | 在线观看91精品视频 | 久久精品www人人爽人人 | 国产亚洲精品bv在线观看 | 久久免费国产电影 | 国产视频 亚洲精品 | 免费高清av在线看 | 国产精品欧美日韩在线观看 | 一区二区三区动漫 | 人人插人人玩 | 国产精品自产拍在线观看蜜 | 黄色成人av在线 | 国产精品福利午夜在线观看 | 黄色看片 | 日韩一二区在线 | 视频一区二区三区视频 | 精品久久久久久久久久久久 | 精品伦理一区二区三区 | 啪嗒啪嗒免费观看完整版 | 国产亚洲精品女人久久久久久 | 日韩最新av | 国产99久久精品一区二区300 | 日韩成人在线一区二区 | 超级碰碰免费视频 | 特级毛片爽www免费版 | 国产在线播放不卡 | 亚洲精品在线一区二区三区 | 免费看黄色毛片 | 欧美日韩一区二区三区免费视频 | 99久久精品日本一区二区免费 | 日本中文字幕高清 | 天天综合网天天 | 日韩字幕在线 | 亚洲一区二区精品视频 | 国产美女精品人人做人人爽 | 色操插 | 日本黄色免费网站 | 婷色在线 | 色天天中文 | 婷婷色五| 午夜国产福利在线 | 日韩视频在线一区 | 国产中文字幕网 | 久久这里只有精品1 | 一二三四精品 | 久久人网 | 久草在线视频在线 | 国产黄色大片 | av在线网站免费观看 | 青青河边草免费直播 | 国产精品久久久久久久久久不蜜月 | 国产一区二区三区免费视频 | 日韩高清www| 国内99视频| 久草视频免费在线播放 | 欧美精品一区在线 | 亚洲精品视频网站在线观看 | 国产精品igao视频网网址 | 99热国产精品 | 天天天干天天射天天天操 | 国产精品免费在线播放 | 97人人澡人人添人人爽超碰 | 天天操天天射天天添 | 天天天干天天射天天天操 | 国产剧情亚洲 | 久久精品高清 | 久久久久电影网站 | 99久久精品一区二区成人 | 天天射天天射天天射 | 国产精品免费视频一区二区 | 97精品国产一二三产区 | 久久无码精品一区二区三区 | 一本一本久久a久久精品综合 | 国模精品在线 | 国产精品美女久久久久aⅴ 干干夜夜 | 五月婷丁香 | 国产精品麻豆99久久久久久 | 91精品第一页 | 中文字幕在线观看视频网站 | 欧美淫视频 | 免费看的黄网站 | 免费在线看v | 午夜天使| 日韩高清网站 | 亚洲国产福利视频 | 久久免费a | 美女网站在线看 | 欧美天天综合网 | 天天做天天看 | 啪啪激情网 | 久九视频| 日韩电影中文,亚洲精品乱码 | 一区二区三区在线播放 | 一性一交视频 | 欧美午夜性生活 | 国产精品久久一区二区三区, | 欧美大荫蒂xxx | 18+视频网站链接 | 免费一级片在线观看 | 日韩精品免费一区 | 国产精品9999久久久久仙踪林 | 国产视频999 | 国内外成人免费在线视频 | 国产一区二区三区四区在线 | 91亚洲精品在线观看 | 最新中文字幕在线资源 | 一区二区三区高清在线 | 久久免费看a级毛毛片 | 日韩一区二区免费在线观看 | 国产99色 | 欧美激情综合五月 | 日韩免费在线视频 | 免费a v在线 | 亚洲成人黄 | 亚洲精品午夜一区人人爽 | 97日日碰人人模人人澡分享吧 | 欧美日韩国产一区 | 国产一级免费播放 | 中文字幕在线一区观看 | 黄色片网站免费 | 国产人成看黄久久久久久久久 | 国产伦精品一区二区三区四区视频 | 亚洲春色综合另类校园电影 | 一区二区视频欧美 | 五月天久久精品 | 亚洲做受高潮欧美裸体 | 奇米网777| 九九热精 | 在线观看免费高清视频大全追剧 | 天堂av最新网址 |