Open uniquejava opened 6 years ago
如果发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的基本操作请查阅相关资料)
保存后提示有冲突
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全部变绿。
注:
git rebase --abort
)git log
查看的历史记录是新的在最上面, 用git rebase
列出的历史记录最新的在最下面.
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
, 然后下载自己仓库中的代码
git clone cyper/hello.git
添加upstream
git remote add upstream xyz/hello.git
拉最新代码
git fetch upstream
基于主仓库分支上的最新代码开新分支干活
git checkout -b task123 upstream/develop
在IDE或editor中修改代码
放到暂存区
git add .
提交代码
git commit -m "day1"
第二天又修改了一些代码
放到暂存区
git add .
提交代码
git commit -m "day2"
准备发pull request了, 首先见步骤3拉一下最新代码
然后做git rebase.
git rebase -i upstream/develop
,此时会用系统默认的editor(mac上是vi)列出一个你在本地提交的历史清单 a. 如果只列出了一条提交记录, 转到下一步 b. 如果本地有多条提交记录请使用squash将多次提交压缩成一次提交,见2楼.
输入
:wq
保存并退出vi编辑器.此时有两种情况 a. 提示success,转至到下一步 b. 提示冲突, 见2楼
推送代码到自己仓库的task123分支:
git push origin task123
在自己的github仓库页面上点Send Pull Request按钮, 左边选择主仓库的
develop
分支, 右边选择自己仓库的task123
分支 , 点Send等待管理员合并代码
删除task123分支 (optional)
转至第3步拉最新代码开发下一个任务
转到第4步开始新任务建新分支, 注意不要再使用
task123
了,换个其它的分支名注:
xyz/hello.git
是简写形式, 请自行补全路径(以git:@
或https://
开始的全路径)