git学习总结之tag、stash、回滚、撤销

最新更新时间:2019年09月27日16:27:30
《猛戳-查看我的博客地图-总有你意想不到的惊喜》

本文内容:git 不常用的相关命令:tag

概述

在日常开发过程中,使用git工具使用工具为了提高开发效率,实施项目版本管理。

tag
  • 介绍

tag命令,给某一个commit做一个标记,tagName和commitID一一对应,因为commitID不容易记忆,因此标签可以当做是某个指定版本库中指定的一个commit代码的一个快照。
tag和分支平级,也就是说可以在任何分支和任何tag之间通过git checkout name命令来回切换。

  • 使用
  • 创建tag
    git tag tagName #在当前分支最近提交的的一次代码上创建一个tag
    git tag tagName commitID #在当前分支指定的提交记上创建一个tag
    git tag -a tagName -m '这个tag的一些说明,可以是从哪个分支新建的tag,修改的内容和日期,以及版本号' commitID #在当前分支指定的提交记上创建一个tag
  • 提交到远程服务器
    git push origin tagName #将本地指定tag推送到远程服务器
    git push origin --tags #将本地全部tag推送到远程服务器
  • 查看tag
    git tag
    git tag -l
    git tag -n
    git show tagName #查看tag详细信息,ctrl+z 退出
  • 删除本地tag
    git tag -d tagName #删除本地tag
  • 删除远程仓库tag的方案一
    git tag -d tagName
    git push origin :refs/tags/tagName
  • 删除远程仓库tag的方案二
    git tag -d tagName
    git push origin --delete tagName
  • 从分支切换到tag
    git checkout tagName
  • 在指定tag上新建一个分支
    git checkout tagName
    git checkout -b new_branch_name
  • 说明
  • tag 是添加在refs/tags/
  • -a | --annotate #给tag添加注释
  • -d | --delete #删除本地tag
  • -f | --force #用新的tagName替换存在tag
  • -F | --file #从指定的文件获取tag信息
  • -l | --list #列出所有tag
  • -m | --message #给tag添加信息
  • -n #打印全部tagName
  • -s | --sign #使用默认电子邮件地址的密钥,给tag添加GPG签名
  • -u | --local-user #使用指定的key(密钥),给tag添加GPG签名
  • -v | --verify #验证GPG签名
分支强制覆盖

应用场景:从master分支切出子分支开发,再从子分支切出子分支开发,会遇到无法合并到master分支的场景,此时可以采用最新的子分支完全覆盖master分支,保证了主分支的完整性。

具体操作如下:

  • git checkout master #切换到主分支
  • git reset --hard feature_branch_name #将feature_branch_name完全覆盖master分支
  • git push -f #将最新master推送到远程仓库
代码回滚与撤销

应用场景:提交master分支并发布上线,发现有问题,需要回滚代码到上一个版本,但发现又没有问题,需要撤销当前的回滚。

具体操作如下一:

  • git reset --hard HEAD^ #回滚代码到上一个版本
  • git pull #恢复代码到最新版本

具体操作如下二:

  • git reset --hard HEAD^ #回滚代码到上一个版本
  • git reflog -5 #查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
  • git reset --hard commitId #恢复代码到最新版本
代码回滚并推向远程
  • 步骤一:回滚
  • git reset --hard HEAD^ #回滚代码到上一个版本
  • git reset --hard commitId #回滚代码到指定版本
  • 步骤二:推送
  • git push -f
用户名和密码

git的用户名是账号,不是邮箱,比如:是wanshaobo,不是wanshaobo@abc.com

  • 重置密码

git config --global user.password"新密码" 要求重新输入账号和密码

  • 重置用户名

git config --global user.name “新的用户名”

  • 重置邮箱

git config --global user.email “新的邮箱”

  • 查看用户名

git config user.name

  • 查看邮箱

git config user.email

  • lone权限不够时,换一个新用户,删除老用户信息
  • git config --system --unset credential.helper
  • sudo git config --system --unset credential.helper #权限不够使用sudo命令
  • git clone 此时需要重新输入用户信息
  • 让git本地记录用户名和密码
  • git config --global credential.helper store
暂存代码-stash

应用场景:当在A分支上开发项目,此时需要切换到B分支查看一些东西,但又不想提交A分支本地开发的代码,此时暂存A分支的代码即可。

  • git stash 暂存本地改动代码
  • git stash save ‘info’ 添加暂存备注
  • git stash list 查看本地暂存代码的列表
  • git stash show 查看暂存栈顶的单次记录中改动了哪些文件
  • git stash show stash@{$num} 查看暂存栈中指定记录中改动了哪些文件
  • git stash show -p 查看暂存栈顶的单次记录中被改动文件的详细内容
  • git stash show -p stash@{$num} 查看暂存栈中指定记录中被改动文件的详细内容
  • git stash apply 应用暂存栈顶的记录,不删除暂存栈的记录
  • git stash apply stash@{$num} 应用暂存栈顶的指定记录,不删除暂存栈的记录
  • git stash pop 应用暂存栈顶的记录,删除暂存栈的记录
  • git stash pop stash@{$num} 应用暂存栈顶的指定记录,删除暂存栈的记录
  • git stash drop 丢弃删除暂存栈顶的记录
  • git stash drop stash@{$num} 丢弃删除暂存栈顶的指定记录
  • git stash clear 清空删除暂存栈
撤销
  • 在没有git add .之前撤销本地代码修改

git checkout – a.js #放弃某个文件的本地改动
git checkout . #放弃所有文件的本地改动

  • 撤销git add .操作,同时不撤销本地代码修改

git reset HEAD a.js #撤销某个文件
git reset HEAD . #撤销所有文件

  • 撤销git add .操作,撤销git commit操作,同时不撤销本地代码修改

git reset HEAD^ #撤销一次commit
git reset --mixed HEAD^ #–mixed 默认参数,可有可有

  • 撤销git commit操作,不撤销git add .操作,同时不撤销本地代码修改

git reset --soft HEAD^ #撤销一次commit

  • 撤销git add .操作,撤销git commit操作,撤销本地代码修改

git reset --hard HEAD^ #撤销一次commit
git reset --hard commitId #代码回滚到指定的commitId

  • 撤销git merge

git reset --hard HEAD #注意此时后面不跟^

  • 撤销git reset --hard feature_branch_name
  • 撤销git reset --hard commitId

分支强制指向 feature_branch_name用来做分支强制覆盖,分支强制指向 commitId用来做代码回滚

在执行这两种操作前,先执行git log -3并手动记录下当前的分支指针指向的commitId,比如是be164b,撤销操作执行git reset --hard be164b即可

万一忘记手动记录之前的commitIdbe164b,此时有两种途径找回git reset --hard之前的commitIdbe164b,第一,去线上代码仓库查看;第二,使用git reflog -10查看

git pull 每次都需要输入账号和密码

git config --global credential.helper store #终端执行

revert
  • 介绍

revert命令,反做,用来恢复代码到某一次或者多次commit的改动之前,不会删除该commit记录,同时会增加一个删除该commit的commit记录。
注意:reset 会删除 commit 记录

  • 撤销一次
  • git revert commitId
  • git push
  • 取消
  • git revert --abort
  • 撤销连续的多次记录,默认生成多次新commit
  • git revert commitId4…commitId6;//左边是开区间,右边是闭区间,即撤销5和6,此时会多出2个commit记录
  • git push
//撤销前
commit6
commit5
commit4
commit3
commit2
commit1

//撤销后
commit8 Revert commit5
commit7 Revert commit6
commit6
commit5
commit4
commit3
commit2
commit1
  • 撤销连续的多次记录,只生成一次的新commit
  • git revert --no-commit commitId4…commitId6
  • git commit -m ‘测试:revert2个commit,只新增一个commit’
  • git push
    注意:-n是–no-commit的简写,如果不带这个参数会自动添加一条commit
//撤销前
commit6
commit5
commit4
commit3
commit2
commit1

//撤销后
commit7 测试:revert2个commit,只新增一个commit'
commit6
commit5
commit4
commit3
commit2
commit1
  • 应用场景一:撤销commit历史记录中的某一次

假设目前有commit1-commit10共计10次记录,只撤销第6次,不撤销7-10次

  • git revert commit6
  • git push
  • 应用场景二:将受保护的分支回滚代码到指定的版本

在受保护的分支上,假如使用git reset --hard HEAD^回滚代码,但是git push -f此时无效,因此可以采用revert命令,自动生成一条新的commit记录后,此时git push有效

  • git revert commitId
  • git push
diff
  • 介绍

diff命令,对比两次不同的commit之间的代码

  • 对比文件
  • git diff /pages/main/index.js
  • 对比当前代码与某一次的commit
  • git diff commitId
  • 对比两次不同的的commit
  • git diff commitId1…commit2
参考资料

感谢阅读,欢迎评论^-^

打赏我吧^-^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值