git指南

本文基于个人git使用经验总结而成,可供初学者上手参考,欢迎补充与指正!
下载安装config以及添加ssh等请自行搜索完成。

git仓库

本地 fork 上游
local origin upstream
基于本地仓库修改代码 自己fork的仓库,拥有修改权限,可以push本地代码 源仓库,一般没有修改权限,所以无法直接push;拥有最新版本的代码

本地仓库初始化相关命令

需求分析:

我要开始为开源社区做贡献了!

git初始化命令

新建本地目录,在该目录下进行如下操作:

  1. 初始化本地git仓库
    git init
  2. 添加与之关联的fork仓库(名字可以随意,建议命名为origin)、上游仓库(名字可以随意,建议命名为upstream)
    git remote add origin origin_ssh_url
    git remote add upstream upstream_ssh_url
  3. 确认关联仓库
    git remote -v
  4. 下载代码
    git clone origin_ssh_url
    ok,到这里就把github里的项目挪到本地了,下一步是开发前的准备——更新/新建分支。

更新本地代码

需求分析:

  1. upstream仓库有更新,而自己fork的origin仓库和本地代码不会自动与之同步。
  2. 其他原因导致本地代码落后于upstream(或origin,极特殊情况)的代码
  • 实际上,origin/master是不需要单独更新的,因为只要将local/master更新至upstream/master,就可以在本地master的基础上新建本地分支,基于最新代码进行修改。修改完成后再push至origin上。

git更新本地代码命令

  1. 拉取上游代码
    git fetch upstream
    git命令使用指南
  2. 同步本地分支 local/master -> upstream/master
    git rebase upstream/master
    git命令使用指南
  3. 此时使用git status查看状态
    git命令使用指南
    会发现本地代码已经同步了上游的代码,领先了origin的代码,此时已经可以开始开发了。如果你非要让origin也同步:
    git push origin master
    接下来就可以进行开发了~

分支

需求分析:

  1. 需要开发多个独立的功能,并以pr的方式逐一提交。
  2. 需要保留master上的代码。

注:

  • 分支同样分为本地(local)分支、origin分支、upstream分支。
  • 一般在本地,与上游代码同步后,基于local/master新建本地分支,该分支中的代码继承master,且在该分支上的改动不会影响local/master中的代码。
  • 建议开发时,尽量将不同分支上开发无互相依赖的不同功能,如在branch A上开发A功能,切换到branch B上开发B功能……
  • 分支之间互不影响,但仍然要注意是否有依赖,否则会在合并时出现冲突。尽量使各功能的开发独立。

git分支常用命令

git checkout branch_name
切换至branch_name分支
git checkout -b new_branch
新建并切换至new_branch分支
git branch -a
查看所有分支(带*等标记的为所在分支)
git branch -D branch_name
删除branch_name分支(请不要直接在该分支上做这种过河拆桥的事情)

提交本地代码

需求分析:

  1. 保存,防止电脑突然歇菜
  2. 暂存,以便之后放弃修改回退到该状态
  3. 开发完成,准备回馈上游社区

git提交命令

本地代码的提交分为三步:推到暂存区、添加提交内容描述、推到origin仓库的新分支上

  1. 建议先确认下修改内容,是不是在正确的分支上,因为如果搞错了,这里没有新修改的内容,是推不上去的
    git status
  2. 将本地修改推到暂存区
    git add -A
    -A的意思是全部
  3. 添加提交描述,这个commit会显示在仓库首页,即最近一次修改,请用简洁正常语句撰写,之前的所有commit也都会保留在github的仓库里,这样比较好看版本修改内容
    git commit -m "simple normal words"
  4. 推送至origin仓库新分支,建议跟本地分支同名
    git push origin new_branch
    然后就可以打开github网页,自己的仓库首页就会提醒你是否根据这个branch创建pr。

合并多个提交commit

需求分析:

  1. 发现了很多typo,分了好几次才全部修改完成,自己看不下去
  2. 热爱提交,commit琐碎重复,被老大要求合并成一个commit
  3. 根据网上教程进行了同步或合并,结果不仅merge了别人的commit,还没有合并成功自己的commit

git合并多个提交命令

  • 查看log
    git log
    git命令使用指南
    这里会出现很多个commit,找到你需要合并的commit,比如将最新一个(HEAD所指)commit和第二个合并为一次提交,复制作为父亲的提交后面那一串 c47e54a3c35b6cec9f5fd2be0fc3905785df6df0之类的
  • 重置提交状态到父提交时,之后会在这个基础上提交一次新的、合并了所有需要合并的提交的提交
    git reset xxxxx
  • 重新推到暂存区
    git add -A
  • 对提交内容描述进行修改
    git commit --amend
    会进入文本编辑,修改描述,之后的commit就只有这次描述了,合并的commit里的旧描述可以注释掉
    git命令使用指南
  • push到origin
    git push origin xxx
    刷新github看看commit记录

代码版本回退、合并

需求分析:

  1. 开发到一半,upstream突然更新了
  2. 开发前忘记更新本地分支

git回退与合并命令

  • 先拉取upstream
    git fetch upstream
  • 需要版本回退,用upstream/master更新本地代码
    git rebase upstream/master
  • 或者需要合并本地代码和上游代码
    git merge upstream/master
  • 可能会遇到各种冲突,根据git提示来就行,直接打开vscode也会给你标出冲突的地方,选择就行

修改pr

直接修改对应的本地分支再push到origin对应分支就行了,pr会自动跟着branch的commit变

总结

综上,一套完整的开发、提交pr流程一般为:

  1. 新建本地目录,后续操作都需要在这个目录下进行
  2. 在该目录下,git init初始化本地git仓库,这个命令用一次就行了,之后基于该仓库的操作请勿再使用init命令,人生没有重来,本地仓库也是
  3. git remote add origin ssh_url ssh_url是复制fork的仓库的ssh,将本地仓库关联fork的仓库
  4. git remote add upstream ssh_url同上,关联上游仓库
  5. git remote -v查看关联的仓库
  6. git clone ssh_url将代码下载下来,建议使用fork的origin仓库
  7. git fetch upstream+git rebase upstream/master开发之前一定要确保本地代码与上游同步,是最新的
  8. git checkout -b feature-A基于local/master,新建本地分支,开发功能A
  9. 开发ing……
  10. 开发完成后,git status看看修改的文件是不是那几个,确认后git add -A把所有的文件(代码)加入暂存区
  11. git commit -m "the changes"添加一次提交,""内填写本次提交概述
  12. git push origin branch_name将刚才加入暂存区的文件(代码)和提交内容推到origin的branch_name分支中
  13. 在github网页上,将origin/branch_name分支以pr形式提交给上游仓库
  14. 如若需要进行下一个功能的开发,记得切换回master分支,再新建本地feature-B分支进行B功能的开发

注意!

为国争光,禁用pull,从我做起。

流程链接

Collaborating with issues and pull requests

相关文章:

  • 2021-07-19
  • 2021-10-14
猜你喜欢
  • 2022-12-23
  • 2021-07-27
  • 2021-10-31
  • 2021-12-05
  • 2021-12-24
  • 2021-07-05
  • 2021-12-09
相关资源
相似解决方案