Git使用

安装和初始化配置

官网提供了各个电脑系统的安装教程,可按照具体需要进行安装。

安装完成之后,可查看版本信息:

1
git -v

配置用户名:

1
git config --global user.name "My Name"

配置邮箱:

1
git config --global user.email "mail@example.com"

配置默认分支名:

1
2
git config --global init.defaultBranch main
# 一般我们设置main为默认主分支名

储存配置:

1
git config --global credential.helper store

查看配置信息:

1
git config --global --list

创建仓库

本地创建:

1
2
3
git init [project-dir]

#省略[project-dir]则在当前目录创建

克隆远程仓库:

1
git clone <url>

工作区域和文件状态

工作区域

  • 工作区(Working Directory): 就是你在电脑里能实际看到的目录。
  • 暂存区(Stage/Index): 暂存区也叫索引,用来临时存放未提交的内容,一般在.git目录下的index中。
  • 本地仓库(Repository): Git在本地的版本库,仓库信息存储在.git这个隐藏目录中。
  • 远程仓库(Remote Repository): 托管在远程服务器上的仓库。 常用的有 GitHub、 GitLab、 Gitee。

文件状态

  • 已修改(Modified):修改了但是没有保存到暂存区的文件。
  • 已暂存(Staged):修改后已经保存到暂存区的文件。
  • 已提交(Committed) :把暂存区的文件提交到本地仓库后的状态。

文件状态描述字符:

  • 未跟踪(Untracked): ??
  • 已添加暂存(Added): A
  • 已修改(Modified): M
  • 已删除(Deleted): D
  • 重命名(Renamed): R
  • 已更新未合并(Updated): U

查看各工作区域文件

查看工作区文件:

1
ls

查看暂存区文件:

1
2
git status
# 列出未追踪,还未提交的新的或者修改的文件

查看仓库文件:

1
git ls-tree -r HEAD

查看所有被git跟踪的文件:

1
git ls-files

添加和提交文件

添加一个文件到暂存区:

1
2
git add <file>
# git add . 就表示添加所有文件到暂存区。

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

1
git commit -m "message"

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

1
git commit -am "message"

移动一个文件到新的位置:

1
git mv <file> <new-file>

从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区:

1
git rm <file>

从暂存区中删除文件,但是本地工作区文件还在:

1
git rm --cached <file>

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

1
git checkout <commit-id> <file>

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

1
git revert <commit-id>

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

1
2
3
4
5
git reset --mixed <commit-id>

# --soft参数表示重置暂存区
# --mixed参数表示重置工作区
# --hard参数表示重置工作区和暂存区

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

1
git restore --staged <file>

查看提交历史:

1
git log --oneline

查看文件差异

比较工作区和暂存区:

1
git diff [file]

比较工作区和仓库区:

1
git diff HEAD [file]

比较暂存区和仓库区:

1
git diff --cache [file]

比较两个版本仓库:

1
get diff <commit-id> <commit-id> [file]

关联本地仓库和远程仓库

需要我们先创建好远程仓库,才能才能进行关联。

当我们没有本地仓库时:

1
2
3
4
git init
git commit -m "first commit"
git remote add origin <repo-url>
git push -u origin main

当我们已经有本地仓库时:

1
2
git remote add origin <repo-url>
git push -u origin main

查看当前仓库对远程仓库的别名和地址

1
git remote -v

分支

查看所有本地分支:

1
2
git branch
# 当前分支前面会有一个星号*,-r查看远程分支,-a查看所有分支。

创建一个新的分支:

1
git branch <branch-name>

删除一个已经合并的分支:

1
2
git branch -d <branch-name>
# -D 强制删除

切换到指定分支:

1
git {switch | checkout} <branch-name>

创建并切换分支:

1
git {switch | checkout} -b <branch-name>

修改分支名称:

1
git branch -m <name>

合并分支(注意所处分支位置):

1
2
git merge --no-ff -m "message" <branch-name>
# --no-ff参数表示禁用 Fast Forward模式, 合并后的历史有分支, 能看出曾经做过合并,而-ff参数表示使用 FastForward模式, 合并后的历史会变成一条直线。

查看分支图:

1
git log --graph --oneline --decorate --all

GitFlow

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

主分支(master/main):代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。
开发分支(develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来。
功能分支(feature):用于开发单独的功能或者特性。每个功能分支都应该从开发分支派生,并在开发完成后合并回开发分支。
发布分支(release):用于准备项目发布。发布分支应该从开发分支派生,并在准备好发布版本后合并回主分支和开发分支。
热修复分支(hotfix):用于修复主分支上的紧急问题。热修复分支应该从主分支派生,并在修复完成后,合并回主分支和开发分支。

注:Git CheatSheet

基于特征分支进行的开发

创建特征分支

1
2
3
# 更新 main 分支
git checkout main
git pull --ff-only
1
2
# 创建特征分支
git checkout -b feature-a
1
2
# 在中央版本库中维护特征分支(可选)
# git push --set-upstream origin feature-a

在 main 分支上集成某一个特征

1
2
3
# 更新 main 分支
git checkout main
git pull --ff-only
1
2
# 合并特征分支
git merge feature-a --no-ff --no-commit
1
2
3
4
5
# 回归测试后正确,进行提交
git commit -m "delivering feature-a"

# 回归测试后错误,取消合并,勘误
# git reset --hard HEAD
1
2
3
4
5
# 将 main 分支传递给中央版本库(github)
git push

# 如果push失败
# git reset --hard ORIG_HEAD

删除或继续使用该特征分支

1
2
3
4
5
# 删除分支
git branch -d feature-a

# 继续使用 / 转到分支
git checkout feature-a