Git

创建仓库

方式一

1
$ git init

方式二

1
$ git clone

数据管理和文件状态

git本地数据管理分三个区域:工作区暂存区本地仓库

工作区:资源管理器里的文件夹

暂存区:临时区域,用于保存即将提交到git仓库的修改内容

本地仓库:用git init创建的仓库,存储代码和版本信息的主要位置

image-20240701094928777

git中文件有四种状态:未跟踪未修改已修改已暂存

image-20240701095501351

添加和提交文件

检查当前文件状态

1
2
3
4
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

添加到暂存区

1
$ git add README

取消添加暂存

1
$ git rm --cached <file>...

提交跟新

1
$ git commit

查看提交记录

1
$ git log

git reset回退版本

reset的三种模式:soft、hard、mixed

image-20240701102123441

回溯之前的操作:

reflog查看之前的操作,找到版本号

reset到版本位置

1
2
$ git reflog 
$ git reset b270efb

git diff 查看差异

git diff默认比较工作区和暂存区差异

git diff HEAD比较工作区和版本库之间的差异

git diff –cache比较暂存区和版本库之间的差异

**git diff <版本一> <版本二>**比较两个版本之间的差异

git diff <版本ID> HEAD比较版本ID和分支最新提交节点的差异

git diff HEAD~ HEAD比较上个版本和当前版本的差异(~可以替换为^)

git diff HEAD~2 HEAD比较提交之前的第二个版本和当前版本的差异

git diff HEAD~2 HEAD file3.txt比较提交之前的第二个版本和当前版本flie3.txt的差异

dff26111c327b5005333b65bbfb5c65f

删除文件

1
$ git rm <filename>

image-20240701111902355

.gitignore忽略文件

应该忽略哪些文件?

  1. 系统或者软件自动生成的文件
  2. 编译产生的中间文件和结果文件
  3. 运行时生成日志文件、缓存文件、临时文件
  4. 涉及身份、密码、口令、秘钥等敏感信息文件

忽略文件夹用/结尾,如temp/

SSH配置和克隆仓库

生成SSH key:ssh-keygen -t rsa -b 4096

克隆仓库:git clone

推送跟新内容:git push

拉取跟新内容:git pull

关联本地仓库和远程仓库

添加远程仓库

1
2
$ git remote add <远程仓库别名> <远程仓库地址>
$ git push -u <远程仓库名> <分支名>

查看远程仓库

1
$ git remote -v

拉取远程仓库内容

1
$ git pull <远程仓库名> <远程分支名>:<本地分支名>

分支简介和基本操作

查看当前仓库所有分支

1
$ git branch

创建分支

1
$ git branch <分支名>

切换分支

1
2
$ git checkout <分支名>
$ git switch <分支名>

合并分支

1
$ git merge <将要合并的分支>

删除分支

1
2
$ git branch -d <已合并的分支>
$ git branch -D <未合并的分支>

终止合并

1
$ git merge --abort

回退和rebase

恢复删除的分支

1
$ git checkout -b <分支名> <分支id>

rebase改基

1
2
$ git switch dev
$ git rebase main

image-20240701155504897

1
2
$ git switch mian
$ git rebase dec

image-20240701155620386

merge

优点:不会破坏原分支的提交历史,方便回溯和查看

缺点:会产生额外的提交节点,分支图比较复杂

rebase

优点:不会新增额外的提交记录,形成线性历史,比较直观和干净

缺点::会改变提交历史,改变了当前分支branch out的节点,避免在共享分支使用

分支管理和工作流模型

GitFlow 是一种流程模型,用于在Git上管理软件开发项目。

**主分支(master/main):**代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。

**开发分支(develop):**用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来。

**功能分支(feature):**用于开发单独的功能或者特性。每个功能分支都应该从开发分支派生,并在开发完成后合并回开发分支。

**发布分支(release):**用于准备项目发布。发布分支应该从开发分支派生,并在准备好发布版本后合并回主分支和开发分支。

**热修复分支(hotfix):**用于修复主分支上的紧急问题。热修复分支应该从主分支派生,并在修复完成后,合并回主分支和开发分支。

image-20240701161341132

git指令一览表

Git-Cheet-Sheet-ByGeekHour