Git中你可能不知道但却很有用的命令
前言
git 官网
本文主要针对有
git
基础的掘友们,没有相应基础可能导致阅读体验感不佳,可以先点赞收藏,从点击这里学习。git
在项目开发中必不可少,我们常用的命令也就那几个(clone、branch、checkout、merge、add、commit、pull、push...),我们在使用时往往发现这些完全不够用。本文告诉你:这些命令还有哪些更好的用法,还有哪些命令是你不知道但却很有用的。
SSH 查看与创建
// 查看是否存在,Windows 可以使用 git-bash 执行下面的命令 ls -al ~/.ssh // 不存在则创建,已存在但不是自己的可以删除再创建 ssh-keygen -t rsa -C ["your_email@example.com"] // 复制 id_rsa.pub 文件全部内容,可以使用记事本等打卡 // Windows 命令 cat id_rsa.pub // 复制输出的所有字符 // Mac 命令 pbcopy < ~/.ssh/id_rsa.pub // 直接复制到粘贴板 // 将内容放到对应的 GitHub/Gitlab 添加新的 SSH 即可复制代码
Git 更新
官网多系统安装 Git
查看
git
版本
git version/--version复制代码
更新
git
版本git update // 2.17.1及以前 git update-git-for-windows // 2.17.1以后复制代码
brew install git brew link git --overwrite复制代码
使用
Brew
安装,安装 Brew。Mac
Windows
git
命令文档
git 命令官方文档
git help/--help [command name] // Windows 可在 git 的安装目录下查找 例如我的在:D:\Git\mingw64\share\doc\git-doc复制代码
全局配置
// 查看系统 config git config --system --list // 查看当前用户(global)配置 git config --global --list // 查看当前仓库配置信息 git config --local --list复制代码
用户名、密码
git config -–global user.name "user name" git config –-global user.email "user email" // 账号密码变动重置 git config --system --unset credential.helper复制代码
命令别名
在使用过程用,有些命令很长(例如:
branch
、commit
等等),我们可以通过别名的方法来代替它。除此之外,我们还可以配置别名为特定的命令。别名可以根据自己的喜好随意配置,不需按照我的一模一样。
git branch -> git bc git commit -> git cm git log -> git config --global alias.lg "log --pretty=oneline --graph" ...复制代码
以
git log
为例:git config --global alias.lg "log --pretty=oneline --graph"
git log
这样是不是大大节约了我们输入命令的时间,提高了我们的开发效率呢。其他同事看到是不是感觉更高级呢。
文件操作
添加
除了 我们常用的
git add ./*
之外。
git add [filepath] -u复制代码
-u
添加远程已追踪的变化文件(已与远程仓库关联),filepath
可选文件路径,不写默认项目根路径。
git add -f [filename] 复制代码
-f
强制添加文件,如果在.gitignore
文件中已经忽略,但是又想提交到仓库不想修改.gitignore
文件(他人不能提交)。
git add . --no-verify复制代码
--no-verify
绕过husky pre-commit
的代码规范校验。
git check-ignore -v [ignore filename/filepath]复制代码
检查
.gitignore
规则是否正确。
撤销
未使用
git add
,可以使用git checkout
。放弃当前所有的文件修改:
git checkout .
(慎用,会丢掉所有编辑过的文件,需要保存的手动存储)。放弃某个文件:
git checkout -- filepathname
(比如:git checkout -- readme.md
,不要忘记中间的 “--
” ,不写就成了检出分支了!!!)。已使用
git add
,可以使用git reset
。放弃所有的缓存:
git reset HEAD .
。已经用
git commit
,可以使用git reset
。git reset --hard HEAD^
回退到上一次commit
的状态。
git reset
详解。
// merge|keep 不常用 $ git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]复制代码
工作区:未使用
git add
;暂存区:已使用git add
。
--mixed
:仅重设暂存区,并把HEAD
指向<commit>
,但是不重设工作区,本地文件修改不受影响。 这个模式是默认模式,即当不显示告知git reset
模式时,会使用mixed
模式。 工作区中文件的修改都会被保留,不会丢弃,但是也不会被标记成Changes to be committed
,但是会提示文件未被更新。 (回退到某个版本,只保留源码,回退commit和index信息)--hard
:重设暂存区和工作区 ,从<commit>
以来在工作区中的任何改变都被丢弃,并把HEAD
指向<commit>
。 (彻底回退到某个版本,本地的源码也会变为上一个版本的内容。)--soft
: 工作区中的内容不作任何改变,HEAD
指向<commit>
,自从<commit>
以来的所有改变都会回退到“暂存区”中,显示在git status
的Changes to be committed
中。(回退到某个版本,只回退了commit
的信息。如果还要提交,直接commit
即可。)
通过
git log
中的commit_id
我们可以回退到之前的任意版本。
git reset --hard commit_id复制代码
查看提交记录
使用
git reset
回退到Delete .DS_Store
。
git lg
2. 看上面的 git lg
打印,我们发现少了我们最后一次提交的 log
记录。当我们执行 git reset
进行版本回退之后,之前最新的版本号无法通过 git log
查询到,此时需要使用git reflog
命令查询Git的操作记录,我们可以从该记录中找到之前的 commit id
信息。
缓存当前修改
前面提到
git checkout .
会放弃所有的工作区修改,那有没有什么办法可以保存呢?
保存
你可以一直执行
git stash
。
释放
pop
和apply
pop
:恢复到工作区,并从stash
存储区内删除;apply
:恢复到工作区,stash
存储区保留,需要手动删除。
git stash pop git stash apply stash@{[index]}复制代码
删除
// 删除某一次的存储内容 git stash drop stash@{[index]} // 清除所有 git stash clear复制代码
查看
// 显示记录 git stash list // 显示信息 git stash show stash@{[index]}复制代码
删除远程文件
rm [filename] // 本地删除 git rm -rf --cached [filename] // 远程删除复制代码
删除后再提交推送一次即可。
分支管理
创建分支
本地分支
// 创建分支 git checkout branch-name // 创建并切换到对应分支 git checkout -b branch-name复制代码
远程分支
// 获取远程分支 git fetch // 创建新分支(最好和远程同名,方便比对)关联远程分支,并切换到对应分支 git checkout -b branch-name origin/branch-name复制代码
合并分支
合并分支
merge
和rebase
区别。git rebase while(存在冲突) { git status # 找到当前冲突文件,编辑解决冲突 git add -u git rebase --continue if( git rebase --abort ) break; }复制代码
git log
时,merg
命令不会保留merge
的分支的commit
。冲突处理:
merge
合并后只需要解决完冲突再一次性添加即可;reabse
解决完冲突,执行git add .
和git rebase --continue
,直到冲突处理完,不会产生额外的commit
。merge
也可以保留commit
记录,但只有在冲突的时候,解决完冲突才会自动产生一个commit
。如果想在没有冲突的情况下也自动生成一个commit
,记录此次合并就可以用git merge --no-ff
。
推送分支
已关联远程
// 不能直接推送,先 pull 再 push git push复制代码
未关联远程(首次推送)
当我们本地直接新建的分支就是未和远程关联的分支,当我们使用
git checkout -b branch-name origin/branch-name
时,就是已关联的分支,前提是远程已存在。
git push --set-upstream origin [branch name]复制代码
删除分支
本地删除
git branch -d [branch name] git branch -D [branch name] // 强制删除复制代码
远程删除
git push origin --delete [branch name]复制代码
Tag管理
创建
git tag [tag version] // 当前提交 git tag -a [tag version] -m [tag description] // 当前提交 git tag [tag version] commit_id // git log 的commit id 给之前的提交打tag复制代码
查看
git tag // 查看所有 git show [tag version] // 查看具体某个tag复制代码
推送
git push origin [tag version] // 推送某个 git push origin --tags // 推送所有复制代码
删除
git tag -d [tag version] // 本地删除 git push origin :refs/tags/[tag version] // 远程删除复制代码
作者:小小小十七
链接:https://juejin.cn/post/7023400894288887821