0


开源社区必会知识点— —git提交pr

开源社区必会

1 fork仓库并提交之后给开源社区提交pr

1.1 fork开源仓库

①登录github,找到开源仓库A,然后点击fork
在这里插入图片描述

这样,就会在你自己github账号下创建一个同名的仓库B(仓库名可修改)

②然后本地修改,提交到自己的github账号下的那个B仓库

1.2 将本地多个commit合并为1个

一般来说,开源社区提交pr都是需要合并为一个commit的

  1. 比如,我现在有4个commit:
85d5d8fa468b06bb9a62fafde01d80cbb7396682 # 我改的

621ca4121f971d9604e395556763551427d799d9 # 我改的

f744d2e91916ab7831f3a7695d1d1825916db164 # 我改的

5c135e49e683563fa470d7f5c281050ec1d73af9 # 我改的

295ac3b842b4ecb6eff1c9954a281a4606a8bc84 # 别人改的
  1. 我现在想把我提交的commit合并为1个
8403afe13664d6bb7f5a5557716a030e9389a944 # 我改的

295ac3b842b4ecb6eff1c9954a281a4606a8bc84 # 别人改的
  1. 具体操作方法
1.2.1 方法一:合并commitID

先从版本库回退内容到暂存区,再重新提交工作区的内容

  • 思路:使用 git reset --soft 回退版本库和暂存区的版本,同时保留工作区的变动,之后再重新提交工作区的内容就好了。
# 查看前10个commit【找到别人最后一次提交的位置】git log -10# 从版本库恢复文件到暂存区,不改动工作区的内容git reset --soft 295ac3b842b4ecb6eff1c9954a281a4606a8bc84    # 别人改的commitID# add已经跟踪的文件gitadd-u# 提交git commit -m"修改信息"# 强制push以替换远程仓的commitIDgit push --force

如果push失败,出现Reject,则需要开启分支强制合入的选项,取消分支保护。

  • Settings -> Repository -> Protected Branches -> Protected branch (找到分支) -> Unprotect
1.2.2 方法二:git rebase
# 查看前10个commitgit log -10# 将4个commit压缩成一个commitgit rebase -i HEAD~4    
# add已经跟踪的文件gitadd-u# 提交git commit -m"修改信息"# 强制push以替换远程仓的commitIDgit push --force

注意:

git rebase

临时

创建一个

新分支

进行,如果弄着出错了,可以 git checkout 原分支名 切换回原分支之后重新 git rebase。

git rebase具体演示:

我想合并前四个 commit 到最后一个。如下所示:

①git log 查看历史提交信息
在这里插入图片描述
②git rebase -i HEAD~n

使用 git rebase -i HEAD~5 压缩5个commit为1个,或者git rebase -i 51efaef517abdbf674478de6073c12239d78a56a (第一个commit的id)

vim编辑器,按i编辑,将后4个commit的pick修改为fixup,保留第一个pick。按esc键,输入:wq保存退出。

  • pick:使用commit。
  • reword:使用commit,修改commit信息。
  • squash:使用commit,将commit信息合入上一个commit。
  • fixup:使用commit,丢弃commit信息。在这里插入图片描述 操作完之后,发现commit都合并成了一个。在这里插入图片描述 ③git push --force 提交在这里插入图片描述

1.3 提交pr

A:代表开源社区的仓库,B:代表你自己fork下来的仓库

  1. 在自己fork下来的B仓库中,创建一个pull request:在这里插入图片描述
  2. 填写pr信息在这里插入图片描述
  3. 填写注释信息在这里插入图片描述

2 同步自己fork的仓库

  1. 把fork的项目克隆到本地仓库中
  2. Configuring a remote for a fork
  3. Syncing a fork
# 1. git clone 自己fork的仓库(自己的仓库B)git clone 自己仓库的地址(B)
# 2. 查看仓库的远程状态git remote -v# 3. 添加仓库的上游git remote add upstream 开源仓库的git地址(A)
# 4. 查看是否配置成功git remote -v# 5. 同步开源社区的修改## 从上游拉取最新代码git fetch upstream
## 切换到本地主分支git checkout master
## 将从上游拉取的代码合并到本地git merge upstream/master
# 6. 同步到自己fork的仓库Bgit push origin master

效果图:
在这里插入图片描述

3 实战

3.1 通过git命令实现pr

# 将fork出来的仓库clone到本地(自己的仓库)git clone [email protected]:xxxxx/local.git
# 查看仓库情况git remote -v# 添加自己fork的那个仓库(公司的仓库地址)git remote add upstream [email protected]/company.git

# 从upstream/main分支上新建一个upstream-local本地分支,并切换到该分支git checkout -b upstream-local upstream/main

# 将upsream/main分支上的提交rebase(同步)到本地git fetch upstream
git rebase upstream/main
 
 # 将本地提交push到远程,然后我们就可以在github的upstream-loca分支上提交pr了git push --set-upstream origin

3.2 通过goland提交pr

①将fork后的仓库(自己的仓库)clone到本地

# 自己fork的公司的仓库地址(自己fork下来的仓库地址)git clone [email protected]:xxxxx/local.git
# 查看仓库情况git remote -v

②给本地仓库添加upstream上游

# 添加自己fork的那个仓库(公司的仓库地址)git remote add upstream [email protected]/company.git
# 将远程分支fetch到本地git fetch upsteam

③查看本地git仓库状态

我们可以看到远程分支了 upstream/main 和 origin/main ,upstream 是真正的项目地址(公司仓库地址),origin 是 fork 到我们仓库的分支。

  • checkout到upstream/main(仓库公司的地址),并起名为upstream-main

在这里插入图片描述④拉取下最新代码并进行rebase
在这里插入图片描述
在这里插入图片描述

Merge是将公共分支最新版合并到自己的分支中,形成一个新的 commit 提交。而Rebase则像公共分支又重新拉出来这个分支一样。

  • Merge(合并)是最常见的操作,Rebase(变基) 则用得很少。 但是项目中有种情况更适合用Rebase:自己开发分支一直在做,有多次commit(提交)。某天想把主线的修改合到自己的分支上,做一次集成,这种情况用Rebase就可以把commit都放在主线修改的头上。

⑤切回到我们本地的main分支,并新建dev开发分支
在这里插入图片描述
⑥rebase下远程仓库的代码
在这里插入图片描述
⑦然后就可以提交了
在这里插入图片描述

我们push后会有一个提示

在这里插入图片描述
⑧然后我们就可以提交pr了,从我们的dev分支提交到公司的main分支
在这里插入图片描述

参考:
https://blog.csdn.net/Spade_/article/details/108698036
https://blog.csdn.net/u012435142/article/details/89491388
https://www.jianshu.com/p/021bb953ee8d
https://blog.csdn.net/xiaobinqt/article/details/116277126

标签: git 开源 github

本文转载自: https://blog.csdn.net/weixin_45565886/article/details/131378343
版权归原作者 NPE~ 所有, 如有侵权,请联系我们删除。

“开源社区必会知识点— —git提交pr”的评论:

还没有评论