git


git

一、配置ssh

  1. 设置user name和email
    git config --global user.name 'heny'
    git config --global user.email 'heny@qq.com'
  2. 生成SSH密钥过程

(1)查看是否已经有了ssh密钥:cd ~/.ssh

路径:c:/用户/Administrator/.ssh 删除.ssh下面的所有文件

(2)生成密钥

ssh-keygen -t rsa -C 'heny@qq.com'   // 回车之后记得根据提示按下yes

注意:如果提示ssh-keygen不是内部命令或者其他的报错,则需要以下配置

找到git/usr/bin目录下的ssh-keygen.exe,之后配置到Path环境变量;

image-20200412204637296

  1. 生成密钥之后就可以去官网绑定了

二、项目初始化

  1. 在git官网新建一个git仓库之后;

如果没有使用readme初始化,执行以下四步

git init  # 初始化
git add .   # 添加当前项目文件夹下的所有文件, 如果是./*则是当前文件夹下
git commit -m '描述'   # 给文件添加备注
git remote add origin 地址    # 添加远程仓库地址
git push -u origin master   # 把本地添加的文件上传到git;
  1. 如果使用了readme初始化;
    git clone 地址  # 克隆只需要操作一次
  2. 当修改了文件之后想要上传代码
    git add .
    git commit -m '添加描述'
    git pull   
    git push
    如果git pull拉下来的代码有冲突则需要先解决冲突问题,解决之后需要再次git add 重复第一二次,如果没有则直接git push

注意:push失败的情况

(1)文件为空

(2)创建文件之后没有commit

三、分支操作

分支常用命令

  • git branch 查看本地分支
  • git branch -a 查看所有分支
  • git branch -vv 查看本地分支写远程分支的对比
  • git checkout <branch> 切换到一个分支,本地没有的分支远程有的话也可以直接切换
  • git checkout -b dev 创建一个新分支
  • git checkout -b dev origin/dev 切换到一个新的分支,并追踪到远程分支上;
  • git push --set-upstream origin dev 将本地新分支推到远程
  • git fetch 拉取最新远程信息
  • git merge master 合并master内容
  • git rebase dev2.0 融合dev2.0分支最新的内容

分支命名规范

  • master:master分支为主分支,也是用于部署生产环境的分支,master分支一般由其他分支进行合并,任何时间都不能直接修改master分支;
  • develop:develop-4.0.0;分支为开发分支,一般开发新功能时,feature分支都是基于develop分支创建的;
  • feature:feature-user;开发新功能时,以develop为基础创建feature分支
  • release:release-4.0.0;release为预上线分支,发布提测
  • hotfix:hotfix-***;线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支

img

主分支master建议每次上线打上tag

git tag -a v0.1 -m '部署包版本名'

commit 提交消息类型

  • feat:添加新特性
  • fix:修复bug
  • docs:仅仅修改了文档
  • style:仅仅修改了样式,不改变代码逻辑
  • refactor:代码重构,没有加新功能或者修复bug
  • perf:增加代码进行性能测试
  • test:增加测试用例
  • chore:改变构建流程、或者增加依赖库、工具等;

清理本地分支

git remote show origin
git remote prune origin

删除分支

删除不能删除远程的分支

(1)删除单个分支

git branch -D dev

(2)批量删除:删除除去master分支:

git checkout master
git branch | grep -v 'master' | xargs git branch -D

rebase

git rebase会将当前分支的提交复制到指定的分支之上;

git rebase master 将一个分支的修改融入到另一个分支;

rebase可以保留一个漂亮的、线性的git历史记录;

同一分支的合并

当拉代码遇到冲突时,需要pull,这时,git log --oneline --graph 会发现多出了一个分叉,这时输入git rebase即可合并当前的分叉,之后执行push提交代码;

也可以直接:git pull --rebase;不需要pull之后再rebase;

不同分支之间的合并

# 当dev1分支修改后, 切换到dev2分支, 并rebase dev1分支
git checkout dev2
git rebase dev1
git checkout dev1

如果在rebase时,出现冲突,比如:代码修改

rebase冲突之后:git rebase --continue;因为之前的rebase其实只完成了一半;

参考文献:Git rebase使用

删除中间的版本

git rebase -i commit-id

执行命令之后会弹出来一个vim编辑器,将要删除的版本的pick改为drop,之后保存,之后执行git push -f -u强制推送远程

常见分支问题

  1. 在非目的分支上做了修改,想切换回目的分支

(1)无论有没有添加到暂存区都行(暂存区就是有commit代码)

git checkout -b new_branch # 建立临时分支, 这样改动会被带到新分支
git stash # 保存在栈区
git checkout 目标分支
git pull # 将代码拉下来, 避免解决冲突
git stash pop # 将栈区内容取出放到当前分支

(2)已提交到本地仓库

git reset HEAD^ # 撤销最近一次提交
  1. ignoring broken ref refs问题

    • 找到.git目录下refs/remotes/origin目录(子模块的这个目录是在主模块的.git目录下,因为子模块没有.git目录)
    • 删除里面的HEAD文件或者所有文件
    • 然后运行git fetch –all
  2. 分支介绍

    所有分支针对master做比较,下图中,左边为落后master分支数量,右边为超前master分支数量;

    image-20200426124513175

四、暂存操作

  1. 为什么需要暂时:

    • (1)当我们写代码时,发现写错分支了,此时需要将代码保存到暂存区,切换到正确的分支再拉下来
    • (2)当我们修改了一些文件时,想查看修改的文件是否造成了其他问题,可以先保存在暂存区,测试完再拉下来
  2. 基础使用

    git stash # 提交到暂存区
    git stash pop # 拉下来
  3. 常用的git stash命令

  • git stash save 'message':执行存储时,添加备注,方便查找,git stash不方便查找
  • git stash list :查看stash了哪些存储
  • git stash show :显示做了哪些改动,默认show第一个存储,
  • git stash show stash@{1} : 显示第一个修改文件
  • git stash apply : 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个
  • git stash apply stash@{1} :应用第一个
  • git stash pop : 命令恢复之前的缓存工作目录,将缓存堆栈中的对应stash删除
  • git stash pop stash@{1} :应用指定的stash
  • git stash drop stash@{1} :丢弃第几个存储,从列表中删除这个存储
  • git stash clear : 删除所有缓存的stash;

注意:新增的文件,直接执行stash是不会被存储的,如果有新增文件的时候,需要首先执行git add添加新文件到git库中,不需要提交和commit,然后再执行git stash即可;

五、用户管理

git config --list 查看git配置

六、版本管理

状态查看

git status 查看文件add的状态,以及远程是否有更新

日志查看

  • git log # 获取版本id

  • git reflog # 查看所有的版本id,可以查看到回退之后的之前的版本

reflog可以查看到所有的操作信息,比如push、reset、commit等等;

比如:1-10的版本回退到1-8的版本,git log只能看到最新的8,reflog还可以看到10;

回退版本

  • 软重置:git reset --soft HEAD~2 或id;

执行软重置不会移除提交之后加入的修改,但是会修改git的历史记录,当使用了reset可以使用status查看修改内容,意味着可以重新修改重新提交;

  • 硬重置:git reset --hard id 不保留提交引入的修改,看不到之前的修改内容;

常用的回退版本命令:

git reset --hard id   # 回退本地代码库
git push -f -u origin master  # 推送到远程服务器
git pull  # 重新拉取代码

回退上一个版本:git reset --hard head^

切换远程仓库地址

git remote -v # 查看本地仓库远程地址
git remote rm origin # 删除本地远程地址
git remote add origin 地址 # 添加远程仓库地址
git branch --set-upstream-to=origin/master master # 将本地分支追踪到远程master

七、git常见问题

描述出错怎么修改描述

(1)通过git log找到上一个提交的commit_id

image

(2)通过:git reset –soft commit_id,执行一遍,之后就可以重新git commit了;

项目名字被修改,地址被更换

# 第一种
git remote set-url origin url # 重新设置远程地址

# 第二种
git remote rm origin # 删除跟踪远程
git remote add origin url # 重新配置远程地址

放弃本地修改

没有git add .的情况

  • 放弃单个文件修改:git checkout -- readme.md
  • 放弃所有修改:git checkout .

git add .的情况

  • 放弃单个文件:git reset HEAD readme.md
  • 放弃所有:git reset HEAD .

八、git统计代码量

修改since开始日期,和until到什么日期,如果不修改则是至今

如果单独查询某个用户,修改$name为用户邮箱

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --since =2020-03-30 --until=2020-04-02 --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

–since 限制显示输出的范围

  • --since, --after 仅显示指定时间之后的提交
  • --until, --before 仅显示指定时间之前的提交
  • --author 仅显示指定作者相关的提交

例子:

  • git log --until=1.minute.ago // 一分钟之前的所有log
  • git log --since=1.day.ago // 一天之内的log
  • git log --since=1.month.age --until=2.weeks.age // 一个月之前到半月之前的log

指定时间

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --since ='2020-04-02 00:00:00' --until='2020-04-02 23:59:59' --numstat | awk '{ add += $1; subs += $2;  loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done

九、git其他操作

在一行查看提交日志:git log --oneline --decorate --graph

git rm

  • git rm:同时从工作区和索引中删除文件

  • git rm -r --cached:从索引中删除文件,但是本地文件还在

  • 常用的删除远程文件命令:

    git rm -r --cached target # 删除target文件
    git commit -m 'delete target'
    git push

打造自己的git bash

https://blog.csdn.net/Dancer__Sky/article/details/81632640

十、vscode操作git

vscode配置git环境

终端直接使用git方式,带有颜色

(1)将以下代码添加到vscode设置里面

路径:点击小齿轮–>设置–>点击以json文件编辑,并添加进去;

"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"

(2)之后按ctrl+` 可以打开终端;

输入cmd可以转回原生的cmd终端

输入bash可以转回git终端;

vscode文件后面的字母意思

A: 你本地新增的文件(服务器上没有).

C: 文件的一个新拷贝.

D: 你本地删除的文件(服务器上还在).

M: 文件的内容或者mode被修改了.

R: 文件名被修改了。

T: 文件的类型被修改了。

U: 文件没有被合并(你需要完成合并才能进行提交)。

X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)。

vscode上传代码

  1. 点击分支

image

  1. 点击对勾,之后弹出提示框,提示输入commit

image

  1. 点击推送,或者推送到(会提示选择分支);

image

  1. 之后去git里面查看是否已经提交了代码;

image

vscode切换分支

image

十一、vscode插件

gitlens

使用gitlens使开发更方便,代码管理更容易

  1. 搜索:gitlens 并安装,之后在每一行代码后面可以清晰的看见

image

  1. 侧边栏工具使用

image

image

  1. 右上角实时对比分支修改内容

image

git graph

方便查看git分支提交记录,可以直接基于一个log创建一个新的分支、

image-20200814102540364

两种打开方式:

image-20200729003318782)image-20200814102618851

十二、github搜索技巧

image

参考链接


文章作者: heny
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 heny !
评论
  目录