Git 的概念以及相关操作

Git的安装

根据Git的官方网站 :https://git-scm.com/dowmloads/,选择相应的版本,根据安装命令进行Git的安装。

初始化

初始化设置用户名和邮箱

复制代码
git config --global user.name  "Your Name"
git config --global user.email  "email@mail.com"
git config --global credential.helper store

创建仓库

创建一个新的本地仓库(省略project-name 则在当前目录创建)

复制代码
git init  <project-name>

下载一个远程仓库

复制代码
git clone <url>

工作区域和文件状态

Git的四个区域

  • 工作区(Working Directory):电脑能看到的目录
  • 暂存区(Stage / Index):一般存放在 .git目录下的index文件,有时把暂存区叫做索引。
  • 本地仓库(Repository):工作区的隐藏目录 .git,不算工作区,是Git的版本库。
  • 远程仓库(Remote):托管在远程服务器上的仓库

Git的三种状态

  • 已修改:修改了文件,但是未保存到暂存区。
  • 已暂存:把修改后的文件放在暂存区。
  • 已提交:把暂存的文件提交到本地仓库。

基本概念

  • main 默认主分支
  • origin 默认远程仓库
  • HEAD 指向当前分支的指针
  • HEAD^ 上一个版本
  • HEAD^4 上四个版本

特殊文件

  • .git git的元数据和对象数据库
  • .gitignore 忽略文件,不需要提交到仓库
  • .gitattributes 文件的属性
  • .gitkeep 使空目录被提交到仓库

添加和提交

添加一个文件到仓库

复制代码
git add <file>

添加所有文件到仓库

复制代码
git add .

提交所有暂存区的文件到仓库

复制代码
git commit -m"message" 

提交所有已修改的文件到仓库

复制代码
git commit -am'message'

分支

查看所有本地分支,当前分支前面会有一个*,-r查看远程分支,-a查看所有分支

复制代码
git branch

创建一个新分支

复制代码
git branch <branch-name>

切换到指定分支,并更新工作区

复制代码
git checkout <branch-name>

创建一个新分支,并切换到该分支

复制代码
git checkout-b <branch-name>

删除一个已经合并的分支

复制代码
git branch-d <branch-name>

删除一个分支,不管是否合并

复制代码
git branch -D <branch-name>

合并分支

合并分支a到分支b,-no-ff参数表示禁用Fast forward模式,合并后的历史有分支,能看出曾经做过合并,而-ff参数表示使用Fast forward模式,合并后的历史会变成一条直线。

复制代码
git merge --no-ff -m"message" <branch-name>

合井&squash所有提交到一个提交

复制代码
git merge --squash <branch-name>

rebase不会产生新的提交,而是把当前分支的每一个提交都"复制"到目标分支上,然后再把当前分支指向目标分支,而merge会产生一个新的提交,这个提交有两个分支的所有修改。

Rebase

Rebase操作可以把本地未push的分叉提交历史整理成直线看起来更直观。但是,如果多人协作时,不要对已经推送到远程的分支执行Rebase操作。

复制代码
git checkout <dev>
git rebase <main>

撤销

移动一个文件到新位置

复制代码
git mv <file> <new-file>

从工作区和暂存区中删除一个文件,然后暂存删除操作

复制代码
git rm <file>

只从暂存区中删除一个文件,工作区中的文件没有变化

复制代码
git rm  --cached <file>

恢复一个文件到之前的版本

复制代码
git checkout <file> <commit-id>

创建一个新的提交,用来撤销指定的提交,,后者的所有变化都将被前者抵消,并且应用到当前分支

复制代码
git revert <commit-id>

重置当前分支的HEAD为之前的某个提交,并且删除所有之后的提交。

复制代码
git reset --mixed <commit-id>
git reset 用于回退版本
--soft 	保留暂存区和工作区的所有修改内容。
--hard	丢弃暂存区和工作区的所有修改内容。
--mixed	保留工作区的修改内容,丢弃暂存区的修改内容。

撤销暂存区的文件,重新放回工作区(git add的反向操作)

复制代码
git restore --staged <file>

查看

列出还未提交的新的或修改的文件

复制代码
git status

查看提交历史,--oneline 可省略

复制代码
git log   --oneline

查看未暂存的文件更新了哪些部分

复制代码
git diff

查看两个提交之间的差异

.gitignore文件的匹配规则

  • 从上到下逐行匹配,没一行代表一个忽略模式
    Git官网匹配规则:https://git-scm.com/docs/gitignore
  • 空行或以#开头的行会被Git忽略。一般空行用于可读性分隔,# 一般用于注释。
  • 使用标准的Blob模式匹配,例如:
    星号*:通配任意个字符
    文号?:匹配单个字符
    中括号[]:表示匹配列表中的单个字符,比如[a,b,c]表示a/b/c
  • 两个**表示匹配任意中间目录
  • 中括号可以使用短中线连接,比如:

    0-9\]表示任意一位数字,\[a-z\]表示任意一位小写字母。

相关推荐
随便取个六字5 小时前
GIT操作 学习
git·学习
星源~14 小时前
tree 命令集成到 Git Bash:可视化目录结构的指南
git·单片机·物联网·嵌入式·项目开发
zhaqonianzhu15 小时前
git gerrit安装钩子
git·gerrit
这是个栗子16 小时前
【问题解决】VSCode终端中看不到Git-Bash
ide·git·vscode
悲伤小伞16 小时前
linux_git的使用
linux·c语言·c++·git
天机️灵韵17 小时前
云效DevOps vs Gitee vs 自建GitLab的技术选型
git·开源项目
荔枝吻1 天前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
mrbone111 天前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
小哈龙1 天前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
GISer_Jing1 天前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch