uniquejava / blog

My notes regarding the vibrating frontend :boom and the plain old java :rofl.
Creative Commons Zero v1.0 Universal
11 stars 5 forks source link

github flow #213

Open uniquejava opened 6 years ago

uniquejava commented 6 years ago

2.7 重写项目历史

Understanding the GitHub Flow

github fork & pull mode 简明指南(by cyper)

假设主仓库的地址为xyz/hello.git, 主分支为develop, 开发者用户名为cyper, 需要做任务task123, 采用fork & pull方式的流程如下:

首先在github上打开xyz项目的地址, 点右上角的fork按钮fork一份主仓库的代码到自己的用户空间下, 于是有了cyper/hello.git, 然后

  1. 下载自己仓库中的代码 git clone cyper/hello.git

  2. 添加upstream git remote add upstream xyz/hello.git

  3. 拉最新代码 git fetch upstream

  4. 基于主仓库分支上的最新代码开新分支干活 git checkout -b task123 upstream/develop

  5. 在IDE或editor中修改代码

  6. 放到暂存区 git add .

  7. 提交代码 git commit -m "day1"

  8. 第二天又修改了一些代码

  9. 放到暂存区 git add .

  10. 提交代码 git commit -m "day2"

  11. 准备发pull request了, 首先见步骤3拉一下最新代码

  12. 然后做git rebase. git rebase -i upstream/develop,

  13. 此时会用系统默认的editor(mac上是vi)列出一个你在本地提交的历史清单 a. 如果只列出了一条提交记录, 转到下一步 b. 如果本地有多条提交记录请使用squash将多次提交压缩成一次提交,见2楼.

  14. 输入:wq保存并退出vi编辑器.

  15. 此时有两种情况 a. 提示success,转至到下一步 b. 提示冲突, 见2楼

  16. 推送代码到自己仓库的task123分支: git push origin task123

  17. 在自己的github仓库页面上点Send Pull Request按钮, 左边选择主仓库的develop分支, 右边选择自己仓库的task123分支 , 点Send

  18. 等待管理员合并代码

  19. 删除task123分支 (optional)

  20. 转至第3步拉最新代码开发下一个任务

  21. 转到第4步开始新任务建新分支, 注意不要再使用task123了,换个其它的分支名

注:

  1. xyz/hello.git是简写形式, 请自行补全路径(以git:@https://开始的全路径)
  2. fork做一次就可以, 即使自己仓库代码已经不新了, 也没关系.
uniquejava commented 6 years ago

13.b 用squash将多次提交压缩成一次提交

如果发pull request前你在本地仅做了一次提交 使用git rebase命令, 将只会列出一条提交记录, 如下:

pick xxxx1 comment from day1

(以上形式的rebase清单默认是用vi编辑器打开的) 此时直接输入:wq 保存退出vi编辑器即可. (vi的基本操作请查阅相关资料)

如果发pull request前你在本地做过多次提交(是个好习惯) 使用git rebase命令将会列出多条提交记录,如下:

pick xxxx1 comment from day1 pick xxxx2 comment from day2 pick xxxxx comment from day3

(以上形式的rebase清单默认是用vi编辑器打开的) 为方便管理员做code review, 需要做git squash, 方法是把除第一个pick之外的其它单词pick 替换成s, 修改后的rebase清单如下

pick xxxx1 comment from day1 s xxxx2 comment from day2 s xxxxx comment from day3

此时直接输入:wq 保存退出vi编辑器即可. (vi的基本操作请查阅相关资料)

输入:wq 保存后提示冲突

保存后提示有冲突 git status查看冲突的文件有哪些,用vscode逐个打开这些文件,在文件中搜索所有出现<<<<的地方

<<<<<HEAD (等号上面是主仓库的代码)
code on head 
======  (等号下面自己本地的代码)
code on some branch
>>>>>>>SOME_BRANCH

比较===上面和===下面的代码,看哪个是对的。 比如我会command+d(删除行)只留下code on head这一段(表示===上面的这段代码是正确的) 保存,打开下一个冲突的文件。修改所有出现<<<的地方。。。

所有的文件改完后 使用git add .提交变化(相当于svn中的mark as resolved) 然后 git rebase --continue 如果还有冲突, 重复以上步骤,直到git status全部变绿。

注:

  1. 在任意时候,如果想撤消所有的变更,使用git rebase --abort)
  2. git log查看的历史记录是新的在最上面, 用git rebase列出的历史记录最新的在最下面.