git常用命令场景

GitHub

常用

拉取分支

git clone -b dev http://xxxx.com  //clone 某分支 通常是dev
  • 通过上面的方法无法获取其他分支内容,仅能获取指定分支,fetch可以拉取所有分支
git init 
git remote add origin http:// xxxxx.com
git fetch
git checkout dev

提交代码

git status
git add .
git commit -m "fix"
git push
  • 你还可以通过vscode的源代码管理进行提交拉取代码

删除不需要的分支

删除本地分支

$ git branch -d 会在删除前检查merge状态(其与上游分支或者与head)。
$ git branch -D 是git branch --delete --force的简写,它会直接删除。

修改commit的message

修改最近的commit的message

$ git commit --amend 修改最新的commit
$ git log 查看	

修改老旧的commit的message

$git log 查看往期提交commit
$git rebase -i commitID

// 出现一个交互页面, 根据提示重写对应的commit, 将pick 修改为r 保存并wq! 退出
// 这时候进入第二个交互页面,  修改message提示信息, 保存wq退出
// 出现修改成功提示信息
// 此时的分支的指针会指向一个新的commitID

将连续的多个commit整理成1个

$ git log --graph  查看下提交的commit
$ git rebase -i commitID
// 进入交互页面 必须保留一个pick, 将其他需要合并的commit的pick 修改为s 会合并到上方的pick的commit上,保存wq退出
// 进入交互页, 输入为何变更合并 保存wq退出
// 出现修改成功提示信息
// 此时的分支的指针会指向一个新的commitID

将间隔的多个commit整理成1个

$ git log --graph  查看下提交的commit
$ git rebase -i commitID
// 进入交互页面 如果没有所需的commit 需要手动输入进来 pick xxxxx 如下图,并且删除掉最后的需要合并的commit
// 进入交互页, 输入为何变更合并 保存wq退出
// 出现修改成功提示信息
// 此时的分支的指针会指向一个新的commitID
// 不妨用gitk --all 查看下结构树

在这里插入图片描述

比较工作区、暂存区、和HEAD

比较暂存区需要提交的文件与HEAD文件

$ git add .
$ git status
$ git diff --cached  //必须加上cached  查看暂存区与HEAD文件的差异
$ vi xxxx文件
// 进入可视化的文件页面进行修改文件内容 wq! 退出
$ git add .
$ git diff -cached // 查看
$ git commit -m " xxxxxx "
$ git log // 查看commit 提交 

比较工作区与暂存区的文件

$ git diff // 查看工作区与暂存区  也可以加上文件名, 单独查看某文件的区别

恢复暂存区与HEAD一样

$ git reset HEAD

恢复工作区与暂存区一样

$ git checkout -- index.html

取消暂存区部分文件的更改

$ git reset HEAD -- style.csss  // 取消提交某文件 可以通过空格分隔多个文件撤回提交暂存区

消除最近几次的提交(回退commit, 彻底从git仓库消失)

$ git reset --hard commitIDxxxxxx   // 修改头指针位置

看看master分支与其他分支的差异

$ git diff master dev  // 显示所有文件差异
$ git diff master dev --index.html // 显示某文件的差异 同样可以使用commitID进行比对

正确删除文件(例如删除readme)

$ git rm readme  // 删除暂存区的readme
$ git reset --hard HEAD // 恢复状态为头指针状态

开发中临时加塞了紧急任务(暂时将手头任务存储起来,处理紧急任务)

$ git stash   // 存储当前任务
$ git stash list  // 查看存储空间
...   // 在这里去处理紧急任务
$ git stash apply  // 恢复存储空间内容

$ git reset --hard HEAD // 重新恢复头指针内容
$ git stash pop  // 再次恢复存储空间内容  和apply类似
// pop和apply的区别
// 当使用apply时仍然保留暂存空间内容  而是用pop时会删除暂存空间内容

暂存代码合并dev分支后merge

$git stash
$git checkout dev
$git pull
$git checkout my_issue  // 切换回自己的分支
$git merge dev
$git stash pop // 通常会出现冲突需要解决

如何指定不需要git管理的文件(例如node_moudles build.zip等)

$ mkdir doc  //新建doc文件夹
$ echo 'hi' > doc/readhim  //写入内容
$ git status // 查看状态
$ vi .gitignore   //进入编辑区
=================
doc
================= 
$ git status //查看状态  所有doc文件夹都不会进行管理
$ vi .gitignore
=================
doc/
================= 
$ git status // 仍然针对doc文件夹下所有内容不进行管理
$ echo '12345678' > doc //生成doc文件
$ cat .gitignore  // 查看gitignore文件
$ git status // doc文件仍被管理
$ git .gitignore
=================
doc
================= 
$ git status // 所有doc都不会进行管理

如何将git仓库备份到本地

$ git clone --bare url地址  
$ git clone -b dev http://10.1.1.11/service/tmall-service.git  // 拉取指定的dev分支
$ git remote add xxxxx  仓库地址
$ git branch -av // 查看远端分支
$ git push xxxxxx // push一个新的分支去仓库

git与gitHub的同步

配置公私钥

$ cd ~/.ssh //进入ssh文件夹
$ ls -al //查看ssh内容
$ ssh-keygen -t rsa -b 4096	 -C "[email protected]"  // 直接回车 生成公私钥
+ 将公钥信息粘贴到github中

建立仓库与远端连接

$ git remote add github xxxxxxxxxxxxx地址  //github等于别名
$ git remote -v  // 查看远端地址
$ git fetch gitub master // 同步远端分支master
$ git git checkout master // 切换分支
$ git merge --allow-unrelated-histores github/master  //将两个没有历史关系的分支进行合并

$ git pull // 等于fetch 和 merge 同时执行 先同步再合并

$ git push github --all //推送本地所有分支到远端

$ git push github master // 单独推送master分支

git单分支多人集成协作开发的常用命令

不同人修改不同文件

// 先git pull
// commit
// 再git push

不同人修改同文件的不同区域

// 先git pull
// commit
// 再git push

不同人修改了同文件的同位置

$ git pull
$ git merge //需要合并 手动解决冲突
$ git commit -am "xxx"
$ git push

同时变更了文件名和文件内容

$ git pull
// 进入编辑区
$ wq! //无需修改退出
$ git push

把同一文件修改成了不同文件名(分别修改index.htm为index1.htm,index2.htm)

$ git pull
// 出现冲突
$ git status
// 协商文件名 最终为index1.htm
$ git rm index.htm
$ git status
$ git add index1.htm
$ git rm index2.htm
$ git commit -am "Decide to mv index to index1"
$ git push

git使用禁忌命令

$ git push -f  //强制更新  会删除所有的commit提交

// 以及绝对不允许向集成分支执行变更历史的操作

gitHub的核心功能

  • Code review 代码审查
  • Project management 项目管理
  • Integrations 集成
  • Team management 团队管理
  • Social coding 开源
  • Documentation 文档
  • Code hosting 代码存放

如何在gitHub上高效搜索我们需要的开源

  • 在github上可以进行高级搜索
    • 时间
    • star
  • 在搜索框可以使用 xxxxx in:readme
    • 可以在readme中所有关键字
  • 在搜索框使用 stars:>1000
    • 可以筛选star>1000的库
  • 在搜索框使用 ‘after_script:’+‘stage:deploy’ filename:.gitlab-ci.yml
    • 可以搜索在文件名gitlab-ci.yml文件内 执行完脚本以及开始ci设计deployed的项目

使用github 进行团队协作

创建团队项目

  • create a new repository
  • 设置.gitignore
  • 设置许可协议
  • 在 settings中 Create new Team 并且设置访问权限

选择工作流

  • 主干开发(推荐)
    • 适用于成员能力强,需要快速迭代,沟通流畅,用户升级组件成本低的环境,能够获取CI/CD的所有好处
  • GIt Flow (不推荐 过于复杂)
    • 适用于不具备主干开发能力,有预定的发布周期,需要严格执行发布流程
  • GitHub Flow
    • 适用于不具备主干开发能力,随时集成随时发布;分支集成时经过代码评审和自动化测试,就可以立即发布.
  • Gitlab Flow(带生产分支)
    • 适用于不具备主干开发能力, 无法控制准确的发布时间,但又要求不停地集成
  • Gitlab Flow(带环境分支)
    • 适用于不具备主干开发能力,需要逐个通过各个测试环境的验证才能发布
  • Gitlab Flow(带发布分支)
    • 适用于不具备主干开发能力,需要对外发布和维护不同版本

Issues

  • 在settings启用Issues跟踪需求和任务

使用projects管理 issues

  • new Project
    • 输入项目看法
    • 可以选择模板
    • 创建project

如何进行code review

  • settings中可以进行master分支保护
  • Branches
    • Apply rule to 输入master
    • 选择code review人数
  • 再对master进行merge时,就需要人员进行review

20210712 新增commit提交前缀

  • ‘build’, // 发布版本
  • ‘chore’, // 改变构建流程、或者增加依赖库、工具等
  • ‘ci’, // 持续集成修改
  • ‘docs’, // 文档修改
  • ‘feat’, // 新增功能
  • ‘fix’, // 修复缺陷
  • ‘perf’, // 优化相关,比如提升性能、体验
  • ‘refactor’, // 代码重构
  • ‘revert’, // 回退版本
  • ‘style’, // 并不是样式的修改,这里的style指的是代码风格的改变
  • ‘test’, // 测试用例修改
  • ‘merge’ // 分支合并

おすすめ

転載: blog.csdn.net/shadowfall/article/details/117155291