工作中常用的 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。

相关推荐
fengyehongWorld3 小时前
Git 认证凭据管理
git
暮云星影12 小时前
git版本发布
git·gitee·github·gitea
乌夷12 小时前
Git Flow 分支模型
git
独隅13 小时前
VS Code Git 工作树多分支并行开发实战评测
git
暮云星影18 小时前
git仓库分支管理
git·gitee·github·gitea
互联网中的一颗神经元2 天前
ZZ — Git 速查表
大数据·git·elasticsearch
早安试言2 天前
git使用
git
燐妤2 天前
梦绘片场 ProjectDream故事总纲场景剧本篇:从项目到成片的 AI 漫剧工作台
人工智能·git·ai·项目开发
JackieDYH2 天前
Git 与 GitHub 新电脑配置指南(从零开始)
git·github·工具·使用教程
Jeanyia3 天前
GitLab 配套 Git 常用命令
git·gitlab