最新更新时间: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
即可
万一忘记手动记录之前的commitId
be164b
,此时有两种途径找回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
参考资料
感谢阅读,欢迎评论^-^