创建仓库

# 创建本地仓库到当前文件夹
git init
# 创建本地仓库到当前文件夹下的子文件夹
git init <子文件夹>

# 拉取远程已存在的仓库到本地(使用远程仓库名)
git clone <远程仓库地址>
# 拉取远程已存在的仓库到本地(使用新名字)
git clone <远程仓库地址> <新名字>

工作区域和文件状态

工作区域:

文件状态:

命令:

git reset

回退到某个版本,版本是指提交到本地仓库的记录

softmixed 基本相似,使用场景是连续提交了多个没有意义的版本,可以回退,合并成一个版本重新提交

hard 的使用场景是真的要放弃某个版本之后的所有提交

git reflog 查看操作记录,使用 git reset --hard 回退到某个操作

git diff

查看三个工作区域之间的差异、不同版本之间的差异、不同分支之间的差异

在命令后面还可以写一个或多个文件名,表示只看某些文件的差异

HEAD

git rm

注意:以上都只是在工作区和暂存区进行操作,记得提交到版本库

.gitignore

应该忽略的文件:

.gitignore 文件匹配规则:

注意:

远程仓库

# 进入家目录的 .ssh 目录
cd ~/.ssh

# 生成 SSH 密钥对
# -t rsa:指定使用 rsa 协议
#-b 4096:指定生成的大小为 4096
ssh-keygen -t rsa -b 4096
# 过程需要输入文件名称,直接回车则默认生成名称为 id_rsa

# 会生成两个密钥文件
id_rsa     # 私钥
id_rsa.pub # 公钥

如果不使用默认名称 id_rsa,则需要在 ~/.ssh 文件夹下创建一个 config 文件,指定 github 使用的密钥:

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test

分支

合并冲突

解决方法:

  1. 手动修改冲突文件的内容
  2. 添加到暂存区
  3. 提交到本地仓库

中止合并:git merge --abort

变基

除了 merge 合并分支外,还有一种方法将多个分支整合到一起,那就是:rebase 变基

git rebase <将要变基到的分支>:将当前分支的新提交变基到目标分支

流程:

  1. 找到两个分支的公共祖先
  2. 将当前分支的新提交变基到目标分支

MR 时冲突

git switch <merge-to-branch>
git pull
git merge --no-ff <merge-from-branch>