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

### 引言

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

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

### 准备工作

- 首先你的电脑需要能够可以输入git命令(即:安装Git)[Git安装地址](http://git-scm.com/downloads)

  - 检查是否电脑是否安装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 开头的两行代码)

    ```c

    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了的部分,而这些部分对于上游仓库而言,又属于变动部分

说了那么多,似乎还没有讲解如何创建分支~

```c

// 创建分支的两种方式  以创建的分支名为 dev 为例

// 1. 直接创建分支并变基分支到该分支

git checkout -b dev(分支名)

// 2. 先创建分支再变基分支

git branch dev(分支名) --> 创建分支

git checkout dev(分支名) --> 变基分支

```

输入`git branch`可以查看所有分支,已经当前所在分支

**注意📢:**

每次提交完PR,需要修改新的代码时,要注意之前提的PR是否已经`merge`,如果没有merge,而你依然在该分支修改代码,那么你的PR会自动合并新的push。

- 这个时候则需要,基于master分支重新创建一个新的分支再进行后续的操作

### 修改代码

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

**注意📢:** 在每次更改代码之前,记得先`git pull` 拉取代码,以免代码库已经产生变动,

### 暂存并提交代码

- 查看代码的状态

- ```c

  git status // 查看代码状态

  ```

- 将代码添加到暂存区

  ```c

  git add 文件路径/文件名 // 将指定文件添加到暂存区

  ```

  - 文件路径和文件名可以通过git status 展示的提示编写

  - `git add .`或 `git add * `可以将所有修改过的文件添加到暂存区

- 把修改的代码提交到<span style="color: red">当前分支</span>

  ```c

  git commit -m"本次提交代码的说明"

  ```

  - 这里需要注意自己参与的开源项目是否需要签名,如果需要的话,这一步骤应该为`git commit -s -m"本次提交代码的说明"`

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

- 变基

- ```c

  git rebase master

  // 在push 代码之前,要执行此命令,本质为给某个commit换一个父commit

  ```

- 推送该分支代码到远程仓库

- ```c

  git push origin dev(分支名)

  ```

### 提交PR

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

- 点开自己的代码仓库中的KubeSphere项目或者,该开源项目的远程仓库

- 点击Code,页面上方会显示多久前push了代码,点击进去,按照提示写好说明提交即可

**-注意📢:** 选择的分支要是自己刚刚更改的分支

### 回退版本

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

- 方案一: 适用于代码写错,直接修改代码,重新执行提交代码的全过程即可

- 方案二:适用于类似遗漏掉 `commit` 中的`-s`的错误:

  ```c

  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命令待笔者用到更多在进行扩展补充,如果有说的不太正确的地方,也请指出并轻喷,本人会虚心改正~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容