工作中常用的 git 命令

了解版本控制

什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统。

什么是分布式版本控制系统分布式版本控制系统( Distributed Version Control System,简称 DVCS )。

在这类系统中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜 像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份

2Git常用命令

Git系统配置

复制代码
git config -l
git-global配置
复制代码
git config --global --list
# 可以设全局公用识别的 邮箱和用户名
git config --global user.name 'xxxxxx'
git config --global user.email 'xxxxx@xxx.com'
项目单独git配置
复制代码
# 查看
git config --list
# 为项目设置单独的user.name和user.email
git config user.name 'xxxxxx'
git config user.email 'xxxxx@xxx.com'

Git初始化

本地初始化
复制代码
git init
远程拉取
复制代码
git clone 远程仓库地址

本地仓库与远程仓库的关联

复制代码
# 本地-建立关联-远程
git remote add origin 远程仓库地址
# 本地-取消关联-远程
git remote rm origin

Git保存和提交

查看状态
复制代码
git status
查看所有文件修改详情
复制代码
git diff HEAD
查看指定文件的修改详情
复制代码
git diff HEAD ./README.md
添加保存

".": 所有修改文件

复制代码
git add .
或
git add ./home.vue
添加保存说明(提交到本地仓库)
复制代码
git commit -m '对这次保存添加说明描述'
拉取代码

多人协作开发的时候,提交之前先拉取下代码,解决可能未来的冲突

复制代码
git pull origin 分支名
提交代码
复制代码
git push origin 分支名

Git提交日志

查看提交记录

查看曾经的提交记录 可以显示所有提交过的版本信息,不包括已经被删除的 commit 记录和 reset 的操作

复制代码
git log --pretty=oneline
控制显示条数
复制代码
git log -30 --pretty=oneline
图形化展示查看当前分支的版本演变信息
复制代码
git log --graph
按作者名字查看提交记录
复制代码
git log --author="John"
搜索提交历史,根据关键词
复制代码
git log -S 关键词
按日期
复制代码
git log --after="2023-2-1"
搜索过滤合并提交
复制代码
git log --no-merges 
or 
git log --merges
按提交信息

比如说,你的团队规范要求在提交信息中包括相关的issue编号,你可以用下面这个命令来显示这个 issue 相关的所有提交

复制代码
git log --grep="JRA-224:"
查看当前 版本标志位

git reflog是Git操作的一道安全保障,它能够记录几乎所有本地仓库的改变,包括所有分支的commit提交,以及已经被删除的commit

复制代码
git reflog

Git回退到某个版本

回退到上一个版本
复制代码
git reset --hard HEAD^ # 回退上一个版本
git reset --hard HEAD~3  # 回退上上上一个版本 
git reset --hard bae128  # 回退到某个版本回退点之前的所有信息。 

HEAD 说明:

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推...

可以使用 ~数字表示

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

  • 以此类推...

Git分支指令

查看素有分支
复制代码
git branch -a
切换分支
复制代码
git checkout 分支名
创建本地分支
复制代码
git branch 新分支名
# 创建并切换到新分支
git checkout -b 新分支名
根据指定版本号创建分支
复制代码
git checkout -b 分支名 提交ID
推送本地分支到远程仓库
复制代码
git push origin 新分支名
删除本地某个分支

这是一个"安全"操作,因为 Git 会阻止我们删除具有未合并更改的分支

复制代码
git branch -d 分支名
强制删除本地某个分支

即使它有未合并的更改。如果想永久丢弃与特定开发线相关的所有提交,则可以使用此命令

复制代码
git branch -D 分支名
删除远程仓库的某个分支
复制代码
git push origin --delelte 分支名
显示所有远程仓库

查看仓库源名称

复制代码
git remote -v
更新远程分支列表
复制代码
git remote update origin(仓库源名称) --prune
推送所有分支到远程仓库
复制代码
git push origin(仓库源名称) --all
强行推送当前分支到远程仓库,即使有冲突
复制代码
git push origin(仓库源名称) --force

Git合并分支

想将develop分支合并到master分支

复制代码
git checkout master # 首先切换到master分支上
git pull origin master # 如果是多人开发的话 需要把远程master上的代码pull下来
git merge --no-ff develop # 然后我们把develop分支的代码合并到master上

关于 git merge develop 和 git merge --no-ff develop 的区别

复制代码
git merge develop

==== >  结果就会变成

          A---B---C develop
         /         master
D---E---F 

执行此句话后,因为 develop 就在 master 的下游,所以直接移动了 master 的指针,master 和 develop 都指向了 C

而如果执行了 git merge --no-ff feature 的话,是下面的结果:

复制代码
git merge --no-ff develop

==== >  结果就会变成

          A---B---C develop
         /         \
D---E---F-----------G master

由于 --no-ff 禁止了快进,所以会生成一个新的提交,master 指向 G。

从合并后的代码来看,结果其实是一样的,区别就在于 --no-ff 会让 Git 生成一个新的提交对象, 通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,而 feature 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史

Git标签

查看tag列表
复制代码
git tag -l
本地添加tag
复制代码
git tag -a 标签名 -m '版本说明'
查看tag信息
复制代码
git show 标签名
本地删除某个tag
复制代码
git tag -D 标签名
or
git tag -d 标签名
推送本地tag到远程仓库
复制代码
git push origin 标签名
删除远程仓库tag
复制代码
git push origin --delete 标签名

小记

  • cmd中使用log命令,不会自动退出,需要手动按下英文状态下的q退出

Git常见错误

1、修改最后一次提交消息 - 提交消息写错了

(按 i 进行编辑,编辑后,按 ESC,如果保存退出使用 :wq,只退出输入 :q,如果出错,退出不保存使用 :qa!)

复制代码
git commit --amend #该命令将打开编辑器,并允许更改最后一次提交消息
2、Git 撤回 commit,但未 push 的内容
复制代码
git log
git reset e102c05227bca7517554777f589f130305b69427 #保留提交之前的更改到工作区
3、让单个文件回退到指定版本
复制代码
git log vue.config.js #拿到文件提交记录ID
git checkout e102c05227bca7517554777f589f130305b69427(commitID) vue.config.js  #将文件还原到你想要还原的版本
4、解决冲突

只要所有开发者都遵守这个规则,那么解决冲突是一件非常容易的事情

  1. 例如我的分支叫做dev分支。我把代码修改完成了,现在不知道有没有冲突。

  2. 在 dev 分支里面,执行命令git merge origin/master,把远程的master分支合并到当前dev分支中。如果没有任何报错,那么直接转到第5步。

  3. 如果有冲突,根据提示,把冲突解决,保存文件。然后执行命令git add xxx把你修改的文件添加到缓存区。然后执行命令git commit -m "xxx"添加 commit 信息。

  4. 执行如下命令,切换到 master 分支:git checkout master

  5. 执行命令git pull确保当前 master 分支是最新代码。

  6. 把dev分支的代码合并回 master 分支:git merge dev

  7. 提交代码:git push。

相关推荐
历程里程碑3 分钟前
4 Git远程协作:从零开始,玩转仓库关联与代码同步(带实操代码讲解)
大数据·c++·git·elasticsearch·搜索引擎·gitee·github
金銀銅鐵2 小时前
[git] 浅解 git reset 命令
git·后端
zhangfeng11333 小时前
部署到服务器上 宝塔系统 使用宝塔在线编辑器 FTP 批量上传 Git 部署 打包上传 codebudyy 编程程序开发
服务器·git·编辑器
学习是种信仰4 小时前
Git工作流
git·深度学习
yuanyuan2o25 小时前
Git merge 的几种不同模式
git·github
视觉小萌新6 小时前
关于Vscode配置企业Git
git
zh_xuan6 小时前
使用命令行把安装包上传到github
c++·git·libcurl·c++工程打包
zhangfeng11338 小时前
适合 5人以内小团队的Git 工作流 + Code Review + 自动化部署方案 FastAdmin +linunx服务器宝塔系统 外包项目 —
服务器·git·自动化·php·代码复审
念一不念二12 小时前
[Git]git仓库管理的使用
git