引言

作为一个初入职场的程序员,想必大家都会面临的一个问题就是如何提交代码,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命令待笔者用到更多在进行扩大补充,如果有说的不太正确的中央,也请指出并轻喷,自己会虚心改过~