乐趣区

关于git:基于向开源项目提PR的常见git操作

引言

作为一个初入职场的程序员👨🏻‍💻,想必大家都会面临的一个问题就是如何提交代码,Git 操作说难也难,说易也易,面向百度也能搜出各式各样的教程,而笔者仍然抉择写一篇,当然是因为笔者发现在工作中用到的和网上现有的教程存在一些差别。

(Ps: 可能有些小白也和当初的我一样并不知道 PR 是什么~,这里解答一下,就是Pull Request)

筹备工作

  • 首先你的电脑须要可能能够输出 git 命令(即:装置 Git)Git 装置地址

    • 查看是否电脑是否装置 Git:在 终端 输出 git version
  • 了解 Git 的工作区、暂存区、仓库区、近程仓库

    • 工作区:即本地代码所寄存的中央(电脑磁盘中)
    • 暂存区:长期寄存改变的文件的区域
    • 仓库区:寄存了所有版本的数据
    • 近程仓库:即 github、gitlab、gitee 等代码托管平台

fork

已经应用 gitlab 作为近程仓库时,只须要间接 clone 即可,当初须要应用了 github 向开源我的项目提交 pr 之后,发现第一步是fork

  • 在 github 中找到想参加的开源我的项目,例如 KubeSphere
  • 点击右上角 Fork 按钮!
  • 点开本人的 github 账号,发现自己的仓库中多了一个 KubeSphere
  • 进入当该我的项目中,点击Clone or download, 而后复制 https 链接

clone

关上 终端 进入一个你想寄存代码的目录而后执行如下操作👇🏻

git clone https://github.com/***/***.git
// 前面的链接就是上一步骤中赋值的链接🔗
// 此时在 master 主分支
  • 与上游分支建设连贯

    • 此时应用 git remote -v 可发现只与本人仓库建设连贯,还须要与上游建设连贯,这样能力将本人仓库中的我的项目的更改提交到开源我的项目中(只有 origin 结尾的两行代码)

      git remote add upstream [url]
      // 这里的 url 为 开源我的项目的 https url,例如 https://github.com/kubesphere/kubesphere.git,
创立连贯后可再次输出 `git remote -v` 发现多了 upstream 结尾的两行

创立分支

对于创立分支肯定要留神,因为如果创立的地位不对,当你提交 PR 的时候,会发现 PR 中的改变文件比你须要的多,而多进去的那些是你已经曾经提过 PR 的文件

分支创立要留神是以什么分支为根底创立(即输出 git branch显示分支为什么)
  • 为什么要强调这一点呢,因为笔者就常常因为大意导致创立的分支超前于主分支,因而提 PR 时多出了很多我不须要的文件
  • 重点在于,这些差别往往只有在提 PR 之后查看文件变动才会发现,因为对于你以后分支的改变来说,那些多余的改变都是曾经 commit 并且 push 了的局部,而这些局部对于上游仓库而言,又属于变动局部

说了那么多,仿佛还没有解说如何创立分支~

// 创立分支的两种形式  以创立的分支名为 dev 为例
// 1. 间接创立分支并变基分支到该分支
git checkout -b dev(分支名)
// 2. 先创立分支再变基分支
git branch dev(分支名) --> 创立分支
git checkout dev(分支名) --> 变基分支

输出 git branch 能够查看所有分支,曾经以后所在分支

留神📢:
每次提交完 PR,须要批改新的代码时,要留神之前提的 PR 是否曾经merge,如果没有 merge,而你仍然在该分支批改代码,那么你的 PR 会主动合并新的 push。

  • 这个时候则须要,基于 master 分支从新创立一个新的分支再进行后续的操作

批改代码

这一步骤,对于懂得人来说是最简略的,对于不懂的人来说是最难的,就不在该文章中做过多的赘述了~

留神📢: 在每次更改代码之前,记得先git pull 拉取代码,免得代码库曾经产生变动,

暂存并提交代码

  • 查看代码的状态
  • git status // 查看代码状态
  • 将代码增加到暂存区

    git add 文件门路 / 文件名 // 将指定文件增加到暂存区
    • 文件门路和文件名能够通过 git status 展现的提醒编写
    • git add .git add * 能够将所有批改过的文件增加到暂存区
  • 把批改的代码提交到 <span style=”color: red”> 以后分支 </span>

    git commit -m"本次提交代码的阐明"
    • 这里须要留神本人参加的开源我的项目是否须要签名,如果需要的话,这一步骤应该为git commit -s -m"本次提交代码的阐明"

      如果须要签名但 commit 使没有加上 -s,会导致提交 PR 之后 check 不通过

  • 变基
  • git rebase master 
    // 在 push 代码之前,要执行此命令,实质为给某个 commit 换一个父 commit
  • 推送该分支代码到近程仓库
  • git push origin dev(分支名)

    提交 PR

    说了那么多的步骤,终于到提交 PR 了

  • 点开本人的代码仓库中的 KubeSphere 我的项目或者,该开源我的项目的近程仓库
  • 点击 Code,页面上方会显示多久前 push 了代码,点击进去,依照提醒写好阐明提交即可
    - 留神📢: 抉择的分支要是本人刚刚更改的分支

    回退版本

    提交一次 PR 的操作还是很多的,指不定在哪一步就因为粗枝大叶写错了,然而没有发现,曾经提交了 PR,这个时候有两种解决方案:

  • 计划一:实用于代码写错,间接批改代码,从新执行提交代码的全过程即可
  • 计划二:实用于相似遗漏掉 commit 中的 -s 的谬误:

    git log --oneline --graph // 查看所有提交记录
    找到刚刚所提交的代码的 前一份代码 的 commit_id
    // 这里留神须要输出 q 能力退出 git log 状态
    git reset --soft commit_id // 回退到 commit_id 的版本
    // 代码状态变回了,commit 之前的状态

    既然说到了 reset 那么就说一下 —soft--hard 的区别

    git reset —soft commit_id: 代码回退到某个版本,并不扭转本地工作区的代码,变成(add 之后,commit 之前的状态)

    git reset —hard commit_id: 代码回退都某版本,本地工作区的代码也回退到该版本,会清空工作目录和暂存区的改变 <span style=”color:red”>(有失落代码的危险,审慎操作)</span>

    善用开发工具 VS code

    不会还有人不晓得 VS code 自身就能够执行 git 的操作吧~ 就在最右边的竖着的第三按钮~

    其余常用命令

    git config --global user.email  "邮箱"// 配置用户邮箱
      
    git config --global user.name "用户名"// 配置用户名
      
    git reset HEAD 文件名 // 将暂存区的文件移除
    
    git reset HEAD^ // 去掉上一次的提交,变成 add 之前的状态
    
    git init 我的项目名 // 在当前目录新建一个 Git 代码库

### 结语

Git 命令其实有很多,然而笔者在这篇文章里就只以向开源我的项目提 PR 为目标解说了罕用的 Git 操作,其余 Git 命令待笔者用到更多在进行扩大补充, 如果有说的不太正确的中央,也请指出并轻喷,自己会虚心改过~
退出移动版