git在工作中的应用

(一)git的一些名词介绍:

  • Workspace(工作区):程序员进行开发改动的地方,平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。
  • Index / Stage(暂存区):暂存区标记了你当前工作区中,哪些内容是被git管理的。通过git add添加文件的相关信息(文件名、大小、timestamp...),可以使用git status查看暂存区的状态
  • Repository(仓库区或本地仓库):git commit后同步index的目录树到本地仓库,保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些
  • Remote(远程仓库):远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

(二)git命令:

1.git pullgit pull --rebase的区别

使用下面的关系区别这两个操作:

  • git pull = git fetch + git merge
  • git pull --rebase =git fetch + git rebase

git merge操作会生成一个新的节点,之前的提交分开显示。而git rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。PS.如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase
如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge

2.git rebasegit merge的区别

  • marge 特点:自动创建一个新的commit如果合并的时候遇到冲突,仅需要修改后重新commit
    • 优点:记录了真实的commit情况,包括每个分支的详情
    • 缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱
  • rebase 特点:会合并之前的commit历史
    • 优点:得到更简洁的项目历史,去掉了merge commit
    • 缺点:如果合并出现代码问题不容易定位,因为re-write了history

参考链接:git rebase 和 git merge 的区别

3.git revertgit reset区别

  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  • git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。

3. git提交命令操作

正常操作流程:
  • git add .
  • git commit -m '备注'
  • git pull --rebase
  • 没有冲突的话,直接git push,提交完成
  • 有冲突的话,解决冲突,然后
  • git add .
  • git rebase --continue
  • git log 查看是否拉下来代码
  • 最后git push
分支操作:
  • 1.在本地dev上 git pull
  • 2.git checkout -b fenzhi 创建分支
  • 3.然后在本地写完代码后,git add .
  • 4.git commit -m 'update'
  • 5.然后切换到dev分支上 git checkout dev
  • 6.然后拉取新代码 git pull
  • 7.合并本地分支 git merge fenzhi
  • 8.没有冲突的话,直接git push提交完成
  • 9.有冲突的话,修改冲突,然后
  git add . 
  git commit --amend #(增补提交,会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消。)
  git push
暂存操作:

reset的内容还需要,比如测试时可以重复用一个commit(之前提交的内容再reset再提交):

git reset --soft ef1739b2fe2e3598ad78232fc5bd5662888cbd00
Git add .(看有没有修改内容)
Git commit 
Git push -f 

之前提交的内容不需要了,回退到某个节点:

Git reset —hard commited
Git push -f 

stash具体操作:

Git add .
Git stash #储藏(stash)工作区相对暂存区更改的文件
Git rebase branch
Git stash pop
Git add .
Git commit 
Git push
Git add .
Git stash
Git rebase branch
有冲突——git add .
Git commit
Git push
其他操作:
  git checkout .  #不需要的代码舍弃
  git rebase --abort  #(rebase进程中有问题时,可以中断进程,回到拉取代码前的状态)
  git checkout -D 'fenzhi' #删除分支
  git config --global credential.helper store #在项目进行过程中,可以通过 git 配置来记住密码
  git rebase -i HEAD~3  //倒推三个commit
  git reset commitID --soft/hard //git回退
  git describe 命令显示离当前提交最近的标签(可查看[git describe](https://www.yiibai.com/git/git_describe.html)命令)

4.远程仓库:

#列出所有的远程仓库
$ git remote -v
origin  /Users/nferzhuang/test/server/a.git (fetch)
origin  /Users/nferzhuang/test/server/a.git (push)

#列出远程仓库 origin 的详细信息
git remote show origin

#添加远程仓库并命名为 origin
git remote add origin <git-repo>

#修改远程仓库的地址
git remote set-url origin <git-repo>

如果你使用不到配置不同的fetch和push,则在使用git remote的时候不加-v参数

参考链接:关于git的一些相关remote操作

5.git配置

  1. husky: git命令hook专用配置
  2. lint-staged: 可以定制在特定的git阶段执行特定的命令
  • Lint-staged帮助你在暂存文件的时候能够让错误格式代码不会提交到你分支

为什么使用Lint-staged?

  • 因为提交代码前的检查是最后一个管控代码质量的一个环节,所以在提交代码之前进行lint检查意义重大。这样可以确保没有错误的语法和代码样式被提交到仓库上。但是在整个项目上执行Lint进程会很低效,所以最好的做法就是检查那个被改动的文件。而Lint-staged就是做这个的。
  • 根据上面我们提供的生态圈依赖包,在package.json中配置该字段:
"lint-staged": {
  "**/*.{tsx,ts}": [ // 这里的文件后缀可以修改成自己需要的文件后缀
    "prettier-eslint --write",
    "git add"
  ]
}
  • Husky结合使用

为了让lint-staged可以在changestaged之前执行,我们这时候需要借助git的钩子功能,而提供钩子功能的社区解决方案就是husky,该工具提供了git在多个阶段前执行的操作,比如我们这次要在预提交的时候进行Lint检查,配置如下:

"husky": {
  "hooks": {
    "pre-commit": "lint-staged"
  }
}

(三)git拓展

1..gitignore文件中是上传文件时即使有修改也默认不上传的文件

#添加本项目的忽略文件
vim .gitignore
#添加本项目的忽略文件并不把此文件纳入版本管理
vim .git/info/exclude

文件中的内容:

ad.DS_Store
node_modules/
dist/
npm-debug.log
yarn-error.log
.idea
.DS_Store
output
dist.zi

2.可以在本地建立一个全局的git=>commit的template文件,这样在每次git commit时都沿用同一个前缀,用作区分提交是 研发还是修改bug,不用每次都看git commit -m '备注' 备注中的内容

3.git命令大全:Git Cheat Sheet (包含git的一些有用的小技巧)

git remote -v //列出所有的远程仓库
git stash //储藏(stash)工作区相对暂存区更改的文件
git stash apply //恢复最后一次储藏的文件
git remote remove <远程地址> //删除远程仓库

4. ShellJS

5. minimist轻量级的命令行参数解析引擎

(四)ssh配置

参考链接:
最常见的 Git 问题和操作清单汇总
ssh-keygen

1.检查电脑是否已经有 SSH key

$ cd ~/.ssh
$ ls
id_rsa #私钥  
id_rsa.pub #公钥
known_hosts

2.如果没有那就开始生成,设置全局的user.name与user.email

git config --list # 查看是否设置了user.name与user.email,没有的话,去设置
#设置全局的user.name与user.email
git config --global user.name "XX"
git config --global user.email "XX"

3.创建一个 SSH key

输入ssh-keygen(或ssh-keygen -t rsa -C "email"

$ ssh-keygen #用来生成ssh公钥认证所需的公钥和私钥文件。
#ssh秘钥登录特点:1.安全;2.免输密码。
#对于安全级别较高的服务器,建议配好ssh登录后禁掉密码登录。
#缺点:略繁琐。如果你的只是临时登录一次,那么还是密码吧。
$ ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注"
# -t rsa:采用rsa加密方式,t=type
# -b :采用长度1024bit的密钥对,b=bits,最长4096,不过没啥必要
# -f :生成文件名,f=output_keyfiles
#-C :备注,C=comment
#更多参数可运行 man ssh-keygen

4.生成之后获取公钥内容,输入cat ~/.ssh/id_rsa.pub 即可, 复制ssh-rsa 一直到 .local这一整段内容

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@agadorlaptop.local
  1. 打开 GitLab 或者 GitHub,点击头像,找到设置页
  2. 左侧找到 SSH keys 按钮并点击,输入刚刚复制的公钥即可

(五) git网站:

本文参考的文章链接:
一篇文章,教你学会Git
一些 实用的 git 小技巧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Git飞行规则(Flight Rules) 前言 英文原版README 翻译可能存在错误或不标准的地方,欢迎大家指...
    骑摩托马斯阅读 5,540评论 0 8
  • 前言 Git使用教程 Git是什么 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 ...
    90后的思维阅读 4,538评论 0 0
  • 三大区域: 工作区 → 缓存区 → 本地仓库 一 、 使用 git config 命令进行配置: git ...
    Manchangdx阅读 7,895评论 0 2
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 5,299评论 0 7
  • git 指南 git操作 本地操作 git add <file>暂存工作区的修改到暂存区 git commit将暂...
    IrisZL阅读 3,762评论 0 0

友情链接更多精彩内容