python网站建设叮咚影视在线观看免费完整版

diannao/2026/1/19 20:22:55/文章来源:
python网站建设,叮咚影视在线观看免费完整版,网站建设开发报价单,宁波建工工程集团有限公司本文面向已经了解/熟悉git基本命令但是并不熟悉如何使用GitHub进行多人协作开发项目的同学。 为了简单起见#xff0c;这里假设只有两个开发人员#xff0c;HuanianLi 和 DaxiangLi。他们在GitHub上的地址和角色为#xff1a; HuanianLi: https://github.com/huanianli # M… 本文面向已经了解/熟悉git基本命令但是并不熟悉如何使用GitHub进行多人协作开发项目的同学。 为了简单起见这里假设只有两个开发人员HuanianLi 和 DaxiangLi。他们在GitHub上的地址和角色为 HuanianLi: https://github.com/huanianli  # MaintainerDaxiangLi: https://github.com/daxiangli  # ContributorHuanianLi将创建一个项目kaiba, 然后请DaxiangLi来帮忙做开发。 为了真实地进行场景演绎我们将首先创建两个GitHub帐号。 1. 在GitHub上创建两个帐号HuanianLi and DaxiangLi这里以HuanianLi为例) 1.1 打开GitHub的主页 https://github.com/ 1.2 点击右上角的Sign up 1.3 跳转到注册页面后开始Create your personal account按照要求输入Username, Email Address, Password, 例如 1.4 点击页面下方的Create an account按钮并按照后续提示完成注册。 2. 在Linux桌面上创建两个用户(huanianli and daxiangli) (这里以huanianli为例) 2.1 创建用户huanianli rootidorax:~# useradd -d /home/huanianli -m -s /bin/bash -c Huanian Li huanianli 2.2 对用户huanianli的git进行设置 这里直接编辑文件~/.gitconfig huanianliThinkCentre:~$ vim ~/.gitconfig huanianliThinkCentre:~$ cat -n ~/.gitconfig 1 [user]2 email huanian.ligmail.com3 name Huanian Li4 [core]5 editor vim6 [push]7 default matching huanianliThinkCentre:~$ huanianliThinkCentre:~$ git config -l user.emailhuanian.ligmail.com user.nameHuanian Li core.editorvim push.defaultmatching huanianliThinkCentre:~$ 2.3 在huanianli的HOME目录下创建一个工作空间workspace huanianliThinkCentre:~$ cd ~ huanianliThinkCentre:~$ mkdir workspace huanianliThinkCentre:~$ ls workspace huanianliThinkCentre:~$ 3. (Maintainer) HuanianLi在GitHub上创建一个项目kaiba 3.1 登录HuanianLi的GitHub空间打开页面Repositories, e.g. https://github.com/HuanianLi?tabrepositories 点击页面右边的New按钮 进入创建一个新的代码仓库的页面。 点击Create repository完成创建。 3.2 进入HuanianLi的Linux桌面clone在3.1创建的项目kaiba huanianliThinkCentre:~$ cd workspace huanianliThinkCentre:~/workspace$ git clone https://github.com/HuanianLi/kaiba.git Cloning into kaiba... warning: You appear to have cloned an empty repository. Checking connectivity... done. huanianliThinkCentre:~/workspace$ ls kaiba huanianliThinkCentre:~/workspace$ cd kaiba huanianliThinkCentre:~/workspace/kaiba$ vi README.md huanianliThinkCentre:~/workspace/kaiba$ cat -n README.md1 kaiba: A sandbox project of Kaiba huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git add README.md huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/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 huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git log commit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git branch * master huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git push -u origin master Username for https://github.com: HuanianLi Password for https://HuanianLigithub.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. huanianliThinkCentre:~/workspace/kaiba$ 在上面的操作中关键的步骤是 clone git clone https://github.com/HuanianLi/kaiba.git push git push -u origin master 注意 因为是第一次push, ‘-u’ 是必须的。 3.3 一旦完成git push之后我们就可以浏览GitHub上的项目了 4. (Contributor) DaxiangLi登录他的GitHub,  然后进入(Maintainer) HuanianLi的GitHub空间fork项目kaiba 4.1 DaxiangLi登录他的GitHub   4.2 进入(Maintainer) HuanianLi的GitHub空间, 点开项目kaiba 注意 目前的 Fork 为0。 4.3 fork项目kaiba, 直接点Fork按钮 Fork 结束后 DaxiangLi的GitHub里就有了项目kaiba 5. ContributorDaxiangLi贡献代码给项目kaiba 5.1 DaxiangLi在他的Linux桌面上clone代码 daxiangliThinkPad:~/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.两个问题 DaxiangLi 能直接clone HuanianLi的GitHub里的代码吗  A: 能。DaxiangLi 能直接clone HuanianLi的GitHub里的代码然后做修改后push回去吗 A: 不能。5.2 DaxiangLi新建一个开发分支 daxiangliThinkPad:~/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的项目添加到DaxiangLi的远程仓库 daxiangliThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git  5.4 将HuanianLi的分支取下来并更新到本地 daxiangliThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream From https://github.com/HuanianLi/kaiba* [new branch] master - upstream/master daxiangliThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master - FETCH_HEAD  5.5 合并HuanianLi的分支到本地(注意这一步在第一次其实不需要) daxiangliThinkPad:~/workspace/kaiba$ git rebase upstream/master Current branch dev is up to date.  5.6 DaxiangLi添加一个文件并提交commit daxiangliThinkPad:~/workspace/kaiba$ git add foo.py daxiangliThinkPad:~/workspace/kaiba$ git commit -m DaxiangLi: Add foo.py daxiangliThinkPad:~/workspace/kaiba$ git push -u origin dev  5.7 进入DaxiangLi的GitHub, 提交一个PR Q: 什么是PR? 参考资料来源点这里 A: PR是Pull Request的缩写是开发者使用GitHub进行协作的利器。简单来说Pull Request是一种机制让开发者告诉项目成员一个功能已经完成。一旦feature分支开发完毕开发者使用GitHub账号提交一个Pull Request。它告诉所有参与者他们需要审查代码并将代码并入master分支。Pull Request不只是一个通知还是一个专注于某个提议功能的讨论版面。Pull Request 需要两个不同的分支或是两个不同的仓库, 其工作原理大概是 开发者在他们的本地仓库中为某个功能创建一个专门的分支开发者将分支推送到公共的GitHub仓库开发者用GitHub发起一个Pull Request其余的团队成员审查代码讨论并且做出修改项目维护者将这个功能并入官方的仓库然后关闭这个Pull Request。 现在点击Compare pull request按钮就创建一个PR, 点页面下方的Create pull request按钮即可。 生成的PR看起来是这样的 6. (Maintainer) HuanianLi 查看PR并Merge 6.1 HuanianLi查看PR HuanianLi可能在PR中加入comment, 要求DaxiangLi做相应的修改。 这里为简单起见直接Review通过。   6.2 HuanianLi点Merge pull request   到此为止DaxiangLi成功地给HuanianLi贡献了一次代码 当然这次贡献过程异常简单因为未涉及到冲突解决。接下来将介绍更复杂的情况这才是重点:-) 6.3 HuanianLi 查看kaiba并删除无用的commit 6.3.1 使用git pull更新本地空间 huanianliThinkCentre:~/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 41667254HuanianLiusers.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 huanianliThinkCentre:~/workspace/kaiba$ git rebase -i c0bd2ed35e10180209726199af422a63a007355f Successfully rebased and updated refs/heads/master. 在弹出的交互界面中不做任何修改直接保存退出即可。   6.3.3 使用git push --force强制更新远端的master分支 huanianliThinkCentre:~/workspace/kaiba$ git push --force Username for https://github.com: HuanianLi Password for https://HuanianLigithub.com: Total 0 (delta 0), reused 0 (delta 0) To https://github.com/HuanianLi/kaiba.git b8a0b63...640f6f6 master - master (forced update) 这下清爽啦   下面将重点讨论这两种比较复杂的场景 场景一 PR Review过程中upstream有更新, 但没有冲突需要解决。例如 DaxiangLi继续修改foo.py, 提交一个PR, 在Review的过程中 HuanianLi增加了一个Makefile并提交了代码。场景二 PR Review过程中upstream有更新, 而且需要解决冲突。例如 DaxiangLi继续修改foo.py, 提交一个PR, 在Review的过程中 HuanianLi也修改了foo.py并提交了代码。这两种场景是常有的事情因为PR提交后在review的过程中可能改动多次。那么在改动的过程中别的合作伙伴给upstream里贡献了代码并导致commit增加是常有的事情。而且别的合作伙伴很可能跟你改动了同一个文件那么你就需要做冲突解决。 场景一 PR Review过程中upstream有更新, 但没有冲突需要解决 101 - 在开发之前DaxiangLi先同步upstream保证remotes/origin/master与remotes/upstream/master一致 daxiangliThinkPad:~/workspace$ daxiangliThinkPad:~/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. daxiangliThinkPad:~/workspace$ cd kaiba daxiangliThinkPad:~/workspace/kaiba$ ls README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git remote update Fetching origin Fetching upstream From https://github.com/HuanianLi/kaiba* [new branch] master - upstream/master daxiangliThinkPad:~/workspace/kaiba$ ls README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master - FETCH_HEAD daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git rebase upstream/master First, rewinding head to replay your work on top of it... Fast-forwarded master to upstream/master. daxiangliThinkPad:~/workspace/kaiba$ ls foo.py README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branch -a * masterremotes/origin/HEAD - origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/master daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin master Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.com: Total 0 (delta 0), reused 0 (delta 0) To https://github.com/DaxiangLi/kaiba.gitc0bd2ed..640f6f6 master - master daxiangliThinkPad:~/workspace/kaiba$ 102 - DaxiangLi 切换到dev分支 daxiangliThinkPad:~/workspace/kaiba$ git branch -a * masterremotes/origin/HEAD - origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/master daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git checkout dev Branch dev set up to track remote branch dev from origin. Switched to a new branch dev daxiangliThinkPad:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branch -a * devmasterremotes/origin/HEAD - origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/master daxiangliThinkPad:~/workspace/kaiba$ 103 - DaxiangLi修改foo.py并commit然后push到remotes/origin/dev daxiangliThinkPad:~/workspace/kaiba$ ls foo.py README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ vi foo.py daxiangliThinkPad:~/workspace/kaiba$ git diff diff --git a/foo.py b/foo.py index 55568dd..4ca134c 100644 --- a/foo.pyb/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 daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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) daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git commit -a -m DaxiangLi: add checking to foo.py [dev e1bb21e] DaxiangLi: add checking to foo.py1 file changed, 4 insertions() daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git show commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li bjlhn126.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.pyb/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 daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin dev Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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 daxiangliThinkPad:~/workspace/kaiba$ 现在从DaxiangLi的GitHub空间里可以看到新增加到dev分支的commit e1bb21e。 104 - DaxiangLi为dev分支的commit e1bb21e创建一个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根据HuanianLi的comments做修改 daxiangliThinkPad:~/workspace/kaiba$ vi foo.py daxiangliThinkPad:~/workspace/kaiba$ git diff diff --git a/foo.py b/foo.py index 4ca134c..84b0787 100644 --- a/foo.pyb/foo.py-5,14 5,14 import sysdef main(argc, argv):if argc ! 2:sys.stderr.write(Usage: %s num\n % argv[0]) - return 1return (-1)i 0while i int(argv[1]):print %02d: Hello World. % ii 1- return 0return (0)if __name__ __main__:argv sys.argvdaxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git add foo.py daxiangliThinkPad:~/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(-) daxiangliThinkPad:~/workspace/kaiba$ git log commit d266d6b3f4b6569e82dcd479c020a53f2d5ef556 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 12:54:48 2018 0800DaxiangLi: add checking to foo.py (2)commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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 daxiangliThinkPad:~/workspace/kaiba$ 105.4 DaxiangLi在PR上做comment, 告诉HuanianLi已经改好了。 注意 PR上出现了两个commit) commit 1: e1bb21ecommit 2: d266d6b 105.5 HuanianLi 重新检查DaxiangLi的PR HuanianLi一看DaxiangLi的PR包含了多个commit, 这哪成啊。。。立即给DaxiangLi写comment, 要求合并多个commits为一个commit。 105.6 DaxiangLi着手合并多个commits daxiangliThinkPad:~/workspace/kaiba$ git log commit d266d6b3f4b6569e82dcd479c020a53f2d5ef556 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 12:54:48 2018 0800DaxiangLi: add checking to foo.py (2)commit e1bb21ee432a56fe83d8b3d79048d1623dde0b4d Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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. daxiangliThinkPad:~/workspace/kaiba$ git log commit 7bab5c2d12389b6a5bf5cd602dff684ea336a52e Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ git diff daxiangliThinkPad:~/workspace/kaiba$ git show commit 7bab5c2d12389b6a5bf5cd602dff684ea336a52e Author: Daxiang Li bjlhn126.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.pyb/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 0return (0)if __name__ __main__:argv sys.argv daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push --force Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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) daxiangliThinkPad:~/workspace/kaiba$ 注意 做git push的时候必须使用 git push --force做git rebase -i commit id的时候 commit id是上一次官方merge的commit id.关于git rebase -i commit id的过程图解如下 01 - 开始做rebase 02 - 进入rebase交互界面注意阅读各个command的含义 03 - 将commit d266d6b应用squash 04 - 在vim里按:wq 保存退出 05 - 切换到commit交互界面 06 删除L6-9, 然后保存退出vim   105.7 DaxiangLi更改一下commit的comment, 重新push daxiangliThinkPad:~/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(-) daxiangliThinkPad:~/workspace/kaiba$ git log commit 254347cbe57fa043ffcc774e26eabdcd63ea8b30 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ git push --force Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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, 请HuanianLi再次review (注意: PR上现在只有一个commit了)   105.9 HuanianLi 给kaiba.git里添加一个Makefile, 在检查DaxiangLi的PR最近改动之前 huanianliThinkCentre:~/workspace/kaiba$ ls foo.py README.md huanianliThinkCentre:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ vi Makefile huanianliThinkCentre:~/workspace/kaiba$ make cp foo.py foo chmod x foo huanianliThinkCentre:~/workspace/kaiba$ ls foo foo.py Makefile README.md huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git add Makefile huanianliThinkCentre:~/workspace/kaiba$ git commit -m HuanianLi: Add Makefile [master 3609dff] HuanianLi: Add Makefile1 file changed, 9 insertions()create mode 100644 Makefile huanianliThinkCentre:~/workspace/kaiba$ git log commit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md huanianliThinkCentre:~/workspace/kaiba$ git branch -a * masterremotes/origin/master huanianliThinkCentre:~/workspace/kaiba$ git push Username for https://github.com: HuanianLi Password for https://HuanianLigithub.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 huanianliThinkCentre:~/workspace/kaiba$ 这时候, HuanianLi的master里包含了3个commits, 而DaxiangLi的master里包含了2个commits, dev分支里包含了3个commits。 那么如果DaxiangLi的dev分支里的top commit (254347c) 被合并到HuanianLi的master分支的时候这一commit可能成为top commit, 也就是第4个commit当然也可能成为第3个commit。 1 --- HuanianLis master branch ---2 commit 3609dff HuanianLi: Add Makefile3 commit 640f6f6 DaxiangLi: Add foo.py4 commit c0bd2ed Initialize the project by adding README.md5 6 --- DaxiangLis master branch ---7 commit 640f6f6 DaxiangLi: Add foo.py8 commit c0bd2ed Initialize the project by adding README.md9 10 --- DaxiangLis 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 DaxiangLis dev branch 17 # is merged into HuanianLis master branch 18 # 19 --- HuanianLis 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, 发现只有一个commit了而且与他的master分支没有冲突决定merge 点击Merge pull request按钮右边的向下箭头我们可看到有三种Merge方式这一次我们将采用Rebase and merge。   105.11 HuanianLi采用Rebase and merge选项处理DaxiangLi的PR Merge 完毕后在HuanianLi的GitHub空间可以看到 HuanianLi重新clone一下kaiba.git 通过git检查Merge: huanianliThinkCentre:~/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. huanianliThinkCentre:~/workspace$ cd kaiba huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md huanianliThinkCentre:~/workspace/kaiba$   106 - DaxiangLi 需要重新sync一下master (这一过程我们在前面介绍过按照基本套路执行即可) daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branch * devmaster daxiangliThinkPad:~/workspace/kaiba$ git checkout master Switched to branch master Your branch is up-to-date with origin/master. daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branchdev * master daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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) daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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 daxiangliThinkPad:~/workspace/kaiba$daxiangliThinkPad:~/workspace/kaiba$ git log commit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master - FETCH_HEAD daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git rebase upstream/master First, rewinding head to replay your work on top of it... Fast-forwarded master to upstream/master. daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin master Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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 daxiangliThinkPad:~/workspace/kaiba$ 注意 这里用到的关键命令是 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同步即可以便下一次做开发 daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branchdev * master daxiangliThinkPad:~/workspace/kaiba$ git checkout dev Switched to branch dev Your branch is up-to-date with origin/dev. daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branch * devmaster daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit 254347cbe57fa043ffcc774e26eabdcd63ea8b30 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git fetch origin master From https://github.com/DaxiangLi/kaiba* branch master - FETCH_HEAD daxiangliThinkPad:~/workspace/kaiba$ git rebase origin/master First, rewinding head to replay your work on top of it... daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin dev Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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. daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin dev --force Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.com: Total 0 (delta 0), reused 0 (delta 0) To https://github.com/DaxiangLi/kaiba.git 254347c...27aca2b dev - dev (forced update) daxiangliThinkPad:~/workspace/kaiba$ 注意 这里用到的关键命令是 1 $ git checkout dev 2 $ git fetch origin master 3 $ git rebase origin/master 4 $ git push origin dev --force 到这里场景一我们就介绍完毕了, 接下来介绍场景二。 场景二 PR Review过程中upstream有更新, 而且需要解决冲突 201 - DaxiangLi第一次更改foo.py daxiangliThinkPad:~$ daxiangliThinkPad:~$ rm -rf workspace/kaiba daxiangliThinkPad:~$ cd workspace daxiangliThinkPad:~/workspace$ daxiangliThinkPad:~/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. daxiangliThinkPad:~/workspace$ cd kaiba daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git remote -v origin https://github.com/DaxiangLi/kaiba.git (fetch) origin https://github.com/DaxiangLi/kaiba.git (push) daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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) daxiangliThinkPad:~/workspace/kaiba$daxiangliThinkPad:~/workspace/kaiba$ git branch * master daxiangliThinkPad:~/workspace/kaiba$ git branch -a * masterremotes/origin/HEAD - origin/masterremotes/origin/devremotes/origin/master daxiangliThinkPad:~/workspace/kaiba$ git checkout dev Branch dev set up to track remote branch dev from origin. Switched to a new branch dev daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branch * devmaster daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ vi foo.py daxiangliThinkPad:~/workspace/kaiba$ git diff foo.py diff --git a/foo.py b/foo.py index 84b0787..44635b7 100644 --- a/foo.pyb/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)daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git add foo.py daxiangliThinkPad:~/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(-) daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit 099cfc7de963a4cbe8ceb7088a710bdb4815dd9d Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 16:57:09 2018 0800DaxiangLi: Update foo.py to use for instead of whilecommit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin dev Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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 daxiangliThinkPad:~/workspace/kaiba$   202 - DaxiangLi第二次更改foo.py 提交更新到remotes/origin/dev分支后不满意于是做第二次修改再提交这里为了保持只有一个commit, 将会用到 $ git commit -a -m comments --amend 全部修改过程如下 daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git log commit 099cfc7de963a4cbe8ceb7088a710bdb4815dd9d Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 16:57:09 2018 0800DaxiangLi: Update foo.py to use for instead of whilecommit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git diff daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ vi foo.py daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git add foo.py daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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 whileDate: Thu Jul 26 16:57:09 2018 08001 file changed, 2 insertions(), 4 deletions(-) daxiangliThinkPad:~/workspace/kaiba$ git log commit 3b9d809f249abfd4d5a53d35006d63f341efbacf Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 16:57:09 2018 0800DaxiangLi: Update foo.py to use for instead of whilecommit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push origin dev --force Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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) daxiangliThinkPad:~/workspace/kaiba$   203 - DaxiangLi创建一个PR   204 - HuanianLi更新foo.py并提交到upstream/master分支 huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git log commit 27aca2bcc0fcffb26828cac1eebe517439ef49c9 Author: Daxiang Li bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ vi foo.py huanianliThinkCentre:~/workspace/kaiba$ git diff foo.py diff --git a/foo.py b/foo.py index 84b0787..a9aa6fe 100644 --- a/foo.pyb/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 huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/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(-) huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git log commit c5221d81c91d45cda15e33c3bf0e82874d7fcc97 Author: Huanian Li huanian.ligmail.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 bjlhn126.com Date: Thu Jul 26 11:39:22 2018 0800DaxiangLi: Add checking to foo.pycommit 3609dff98de5a17a09484738328a0e9db1784e0d Author: Huanian Li huanian.ligmail.com Date: Thu Jul 26 13:54:01 2018 0800HuanianLi: Add Makefilecommit 640f6f63f4634915b4e4ed195e9a48d31cabb893 Author: Daxiang Li bjlhn126.com Date: Wed Jul 25 18:15:38 2018 0800DaxiangLi: Add foo.pycommit c0bd2ed35e10180209726199af422a63a007355f Author: Huanian Li huanian.ligmail.com Date: Wed Jul 25 16:21:43 2018 0800Initialize the project by adding README.md huanianliThinkCentre:~/workspace/kaiba$ huanianliThinkCentre:~/workspace/kaiba$ git push origin master Username for https://github.com: HuanianLi Password for https://HuanianLigithub.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 huanianliThinkCentre:~/workspace/kaiba$ 205 - DaxiangLi再次更新foo.py故意制造一个冲突 daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/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 daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git branch -a * devmasterremotes/origin/HEAD - origin/masterremotes/origin/devremotes/origin/masterremotes/upstream/masterdaxiangliThinkPad:~/workspace/kaiba$ vi foo.py daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git commit -a --amend [dev 924729d] DaxiangLi: Update foo.py to use for instead of whileDate: Thu Jul 26 16:57:09 2018 08001 file changed, 3 insertions(), 5 deletions(-)daxiangliThinkPad:~/workspace/kaiba$ git diff remotes/origin/master.. diff --git a/foo.py b/foo.py index 84b0787..b1070a5 100644 --- a/foo.pyb/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 1for i in range(int(argv[1])):print %02d: Hello World. % (i 1)return (0)daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git diff remotes/upstream/master.. diff --git a/foo.py b/foo.py index a9aa6fe..b1070a5 100644 --- a/foo.pyb/foo.py-5,14 5,12 import sysdef main(argc, argv):if argc ! 2:sys.stderr.write(Usage: %s num\n % argv[0]) - return -1return (-11)- i 0 - while i int(argv[1]): - print %02d: Hello World. % i - i 1for i in range(int(argv[1])):print %02d: Hello World. % (i 1)- return 0return (0)if __name__ __main__:argv sys.argv daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git push --force Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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) daxiangliThinkPad:~/workspace/kaiba$ 制造的冲突是故意将return (-1)改成return (-11) 接下来我们发现PR上就会显示有冲突了   冲突的细节在于foo.py的第8行   好吧接下来DaxiangLi就需要去解决冲突了   206 - DaxiangLi解决冲突 (P.S. 解决冲突不是很容易请仔细看) 206.1 创建一个临时分支dev-scratch 为了演示得更清晰这里故意删除旧的空间重新clone一遍然后从头开始 daxiangliThinkPad:~/workspace/kaiba$ git checkout -b dev-scratch dev Switched to a new branch dev-scratch   206.2 给临时分支dev-scratch添加upstream的repo daxiangliThinkPad:~/workspace/kaiba$ git remote add upstream https://github.com/HuanianLi/kaiba.git   206.3 让临时分支dev-scratch与upstream/master同步 daxiangliThinkPad:~/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 daxiangliThinkPad:~/workspace/kaiba$ git fetch upstream master From https://github.com/HuanianLi/kaiba* branch master - FETCH_HEAD daxiangliThinkPad:~/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 在临时分支dev-scratch里合并冲突 daxiangliThinkPad:~/workspace/kaiba$ git add foo.py daxiangliThinkPad:~/workspace/kaiba$ git commit -m DaxiangLi: Merge confilict in foo.py [dev-scratch c9af088] DaxiangLi: Merge confilict in foo.py   206.5 将本地的临时分支dev-scratch与本地开发分支dev做比较 daxiangliThinkPad:~/workspace/kaiba$ git diff dev..dev-scratch   206.6 切换到本地开发分支dev daxiangliThinkPad:~/workspace/kaiba$ git checkout dev Switched to branch dev Your branch is up-to-date with origin/dev.   206.7 将临时分支dev-scratch合并到开发分支dev daxiangliThinkPad:~/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(-)daxiangliThinkPad:~/workspace/kaiba$ git commit -a --amend [dev 5055a77] DaxiangLi: Update foo.py to use for instead of whileDate: Thu Jul 26 16:57:09 2018 08001 file changed, 4 insertions(), 6 deletions(-) daxiangliThinkPad:~/workspace/kaiba$ daxiangliThinkPad:~/workspace/kaiba$ git diff dev..dev-scratch daxiangliThinkPad:~/workspace/kaiba$   206.8 把本地的开发dev强制推送到远端的开发dev daxiangliThinkPad:~/workspace/kaiba$ git push origin dev --force Username for https://github.com: DaxiangLi Password for https://DaxiangLigithub.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 删除本地的临时分支dev-scratch daxiangliThinkPad:~/workspace/kaiba$ git branch dev-scratch -D Deleted branch dev-scratch (was c9af088). OKAY, 冲突解决完成 重新刷新PR, 发现冲突已经不存在啦。。。   207 - HuanianLi再次检查PR发现没有冲突将代码Rebase and merge 208 - DaxiangLi重新sync远端的master分支 使用下面一组命令即可 (其中 [*]为关键命令) 1 [ ] $ git branch2 [*] $ git checkout master3 [ ] $ git branch4 [ ] $ git log5 [*] $ git remote add upstream https://github.com/HuanianLi/kaiba.git6 [ ] $ git remote -v7 [ ] $ git remote update8 [*] $ git fetch upstream master9 [*] $ git rebase upstream/master 10 [ ] $ git log 11 [ ] $ git diff remotes/origin/master.. 12 [*] $ git push origin master   209 - DaxiangLi重新sync远端的dev分支 (前面其实已经介绍过) 使用下面的命令即可 (其中 [*]为关键命令) 1 [*] $ git clone https://github.com/DaxiangLi/kaiba.git2 [*] $ git checkout dev3 [ ] $ git remote -v4 [*] $ git remote add upstream https://github.com/HuanianLi/kaiba.git5 [ ] $ git remote -v6 [ ] $ git log7 [ ] $ git remote update8 [*] $ git fetch upstream master9 [*] $ git rebase upstream/master 10 [ ] $ git log --graph 11 [*] $ git push origin dev --force 说明 git remote update可以不做直接使用git fetch upstream master也okay. 总结 从upstream fork出代码空间后总是创建一个dev分支并保存到远端比较好这样master分支用来与upstream保持同步dev分支用来做开发提交PR的时候请在dev分支中总是保存一个用来被合作伙伴review的commit如不小心提交了多个commit, 需要进行合并合并的方法是使用git rebase -i保持PR中只有一个commit的秘诀是使用git commit -a --amend然后使用git push origin dev --force养成总是让origin/master与upstream同步的好习惯不用总是让origin/dev与upstream保持同步如果PR中显示有冲突就解决冲突没有就不用管即使origin/dev与upstream不同步 P.S. git没有recommit功能所以你无法总是把你的commit放置到top位置当一个PR被合并后不妨也让origin/dev分支与upstream同步同步的秘诀还是git push origin dev --force可以认为origin/dev分支是一个沙箱可以用来随便玩, 玩坏了大不了删除远端的origin/dev分支再重新创建一个但是请认真对待origin/master尽可能地使用git rebase upstream/master, 不使用git merge upstream/master, 在做同步的时候解决冲突请创建一个本地临时分支dev-scratch, 然后将临时分支合并到本地开发分支dev合并的秘诀是使用 git merge --squash dev-scratch不需要的临时分支dev-scratch用git branch dev-scratch -D删除养成不留垃圾分支的好习惯不小心关掉一个PR可以Re-open, 但是尽量不要在review的过程中删除被review的commit那样会导致PR被自动关闭参考资料 Git教程A successful Git branching model怎样在github上协同开发使用git和github进行协同开发流程GitHub实现多人协同提交代码并且权限分组管理转载于:https://www.cnblogs.com/idorax/p/9366035.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90223.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设捌金手指花总八建设旅游景点的网站的好处

题目描述 原题来自:HAOI 2008 有 n个小朋友坐成一圈,每人有 ai 颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 。求使所有人获得均等糖果的最小代价。 输入格式 第一行有一个整数 ,n表示小朋友个数; …

重庆网站查询海南直聘网

Alt← 前一个编辑的页面 Alt→ 下一个编辑的页面 AltEnter 显示当前选择文件的属性 CtrlF11运行Run As CtrlM 当前窗口最大化 CtrlF7 视窗口切换 CtrlF8 模式切换 CtrlQ 定位到最后编辑的地方 CtrlL 定位在具体某行 CtrlK 选中的Word快速定位到下一个 ctrl.及ctrl1 当某行出错时…

徐州网站建设 网站推广怎样备份网站

这篇文章不是介绍DOCKER是什么,也不是阐述DOCKER的核心:镜像/容器和仓库之间的关系,它只是一篇让刚刚接触DOCKER的初学者,在没有完全了解DOCKER是什么之前,也能尽快的在Linux系统下面通过DOCKER来搭建一个LAMP环境,这是其一&#…

网站设计作品网站怎么做外链

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类: 单向:forward_list双向:list随机:vector / deque 迭代器按功能分类: 正向反向const list的反向迭代器…

可以查企业备案的网站国外 wordpress 免费空间

ts 枚举类型介绍 TypeScript的枚举类型是一种特殊的数据类型,它允许开发者为一组相关值定义一个共同的名称,使我们可以更清晰、更一致地使用这些值。 枚举类型在TypeScript中用enum关键字定义,每个枚举值默认都是数字类型,从0开…

精准营销软件惠阳网站优化

解法一:树形DP 个人觉得这个方法是比较可能想到的,但是输出方案很恶心 先转换题意:“无论怎样规定叶子的初始点权,都可以通过操作你选择的点来让所有叶子的点权清空”意味着每个叶子节点都可以通过一系列操作单独1、-1 模拟一下…

值得相信的西安网站开发学软件工程好找工作吗

案例演示 图1 1.结构分析 文字部分用<p>标签定义&#xff0c;对于特殊显示的文本&#xff08;如导语、详情&#xff09;等可以用<em>、<strong>等格式化标签来定义&#xff0c;效果图如图2。 图2 2.样式分析 &#xff08;1&#xff09;控制段落文本的字体…

网站开发使用的软件wordpress如何不显示评论

mySql安装完成后&#xff0c;配置链接nodejs项目中的数据库。 1、测试是否安装成功。 2、use nodejs使用nodejs 3、设置数据源 5、exit 转载于:https://www.cnblogs.com/zhxzh/p/9244996.html

建站用什么平台好qq浏览器在线打开网页

现象 忘记充电&#xff0c;电量耗尽关机&#xff0c;开机后时间不对&#xff0c;开启自动对时&#xff0c;时间会变成上个月的一天&#xff0c;系统更新后问题依旧&#xff0c;每次出现问题都需要手动调整。 解决方法验证 删除 /var/db/timed/com.apple.timed.plist删除 /et…

户外网站做招聘网站怎么做市场

1. 概述 本文记录在 Ubuntu 16.04 上将 python 升级为 3.8 版本&#xff0c;并配置为系统默认 python3 的过程。 在 Ubuntu 16.04 中&#xff0c;python3 的默认版本为 3.5&#xff1a; $ python3 -V Python 3.5.2 本文以在 Ubuntu 16.04 中安装为例&#xff0c;方法同样适用于…

女生做网站编辑怎么样宁波建设协会网站首页

如今&#xff0c;跨境电商无疑已经成为了一个热门的创业领域&#xff0c;但对于一些新手来说&#xff0c;面临的一个主要挑战是如何处理产品的货源问题。下面我就和大家分享一下无货源跨境电商的基本概念以及一些新手可以采取的策略和步骤&#xff0c;帮助大家在这个领域取得成…

2016 网站建设需求网站怎么做短信营销

概述 随着科学技术的发展&#xff0c;越来越多的智能可穿戴设备出现在我们的眼前&#xff0c;智能手环&#xff0c;智能眼镜、智能防丢器等&#xff0c;防丢器就可以很方便的给出提醒。 目前防丢器的种类有 蓝牙防丢器GPS防丢器RFID防丢器WIFI防丢器等 本文主要讲解蓝牙防丢…

四川省城乡住房与建设厅网站首页全国做临期进口食品的网站

接上篇再学个比较有用的 Symbol.isConcatSpreadable 这个符号作为一个属性表示“一个布尔值&#xff0c;如果是 true&#xff0c;则意味着对象应 该用 Array.prototype.concat()打平其数组元素”。ES6 中的 Array.prototype.concat()方法会 根 据 接 收 到 的 对 象 类 型 选 择…

大型网站建设推荐网站平台建设成本

在数据结构的世界里&#xff0c;我们会认识各种各样的数据结构&#xff0c;每一种数据结构都能解决相应领域的问题&#xff0c;当然每个数据结构&#xff0c;有他的优点&#xff0c;必然就有它的缺点&#xff0c;那么如何创造一种数据结构来将某两种数据结构进行扬长避短&#…

有哪些大站用wordpress信用体系建设网站维运工作制度

信息打点-公众号服务&Github监控&供应链&网盘泄漏&证书图标邮箱资产 #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指纹…

专业建站报价wordpress表单 慢

点击蓝字关注我们一、通讯录简介实现一个通讯录&#xff1b;通讯录可以用来存储1000个人的信息&#xff0c;每个人的信息包括&#xff1a;姓名、性别、年龄、电话、住址提供方法&#xff1a;添加联系人信息删除指定联系人信息查找指定联系人信息修改指定联系人信息显示所有联系…

哈尔滨网站制作案例网站移动端是什么情况

一、我的ubuntu20.04症状描述&#xff1a; 在编辑文字文档的过程中&#xff0c;会不定时的出现鼠标指针随意跳动的情形&#xff0c;严重干扰了做文字编辑、编写代码等工作的进行。先后排除了戴尔笔记本及配件故障、鼠标故障、ubuntu系统中文档编辑软件的故障等可能。 二、原来…

网站模板后台怎么做wordpress哪个版本最好用

一.QPointer QPointer是一个模板类,用于指向QObject或其派生类对象。当QPointer指向的对象销毁时,它会被自动设置为nullptr(在QObject析构时),这和普通C++指针是不同的(普通的C++指针delete后会变为“悬空指针”,需要手动设置为nullptr)。 QPointer的使用场景:QPoint…

给公司做网站的公司邢台市官网

上期回顾&#xff1a;历程[一]描述了基本的树状图的绘制&#xff0c;默认节点类型defaultNode中的type是circle,下面这篇描述的是节点抽离自定义节点并做数据静态渲染。 官网地址&#xff1a;https://g6-next.antv.antgroup.com/manual/introduction 一、案例效果 二、自定义节…

北京做网站建设价格常州 做网站

XML Schema 简介XSD 为何使用XML Schema 是基于 XML 的 DTD 替代者。XML Schema 可描述 XML 文档的结构。XML Schema 语言也可作为 XSD&#xff08;XML Schema Definition&#xff09;来引用。在继续学习之前&#xff0c;您需要对下面的知识有基本的了解&#xff1a;HTML / XHT…