常用命令

初始化

初始化设置用户名和邮箱

1# 设置用户名(全局配置)
2git config --global user.name	"Your Name"
3# 设置邮箱(全局配置)
4git config --global user.email "Your Email"
5
6# 查看用户名
7git config user.name
8# 查看邮箱
9git config user.email
10
11# 查看当前用户的全局git配置
12git config --global --list

创建仓库

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

初始化之后会出现一个名为 .git 的隐藏文件夹,可以以此来判断当前项目是否被 git 所管理

1git init <project_name>

克隆一个远程仓库

1git clone <repository_url>

查看状态

1# 【红色】还未上传至暂存区的文件、【绿色】已上传至暂存区的文件
2git status
3
4# 简洁版
5git status -s

基本操作

添加文件到暂存区

1git add <file>
2
3# 添加当前目录下所有扩展名为 `.txt` 的文件到暂存区
4git add *.txt
5
6# 递归添加所有 .txt文件(包括子目录中的)
7git add '*.txt'
8
9# 添加所有更改
10git add .

提交更改

1# 只提交暂存区中的内容,不会提交工作区中的内容
2git commit -m "message"
3
4# 提交所有已修改的文件到仓库,`-a` 自动暂存所有已跟踪的文件(即那些已经被添加到仓库中的文件)中的更改,但不包括新文件(未跟踪文件)。
5git commit -a -m "message"
6
7-am

查看提交历史

1git log
2
3# 查看简洁的提交记录
4git log --oneline
5
6# 查看分支图
7git log --graph --oneline --decorate --all

分支操作

查看所有本地分支

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

创建一个新分支

1git branch <branch-name>

切换到指定分支

1git checkout <branch-name>
2git switch <branch-name>

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

1git checkout -b <branch-name>
2
3# 创建一个新分支并立即切换到该分支,-c 是 --create 的简写
4git switch -c <branch-name>

恢复分支到某一次提交的状态

1git checkout -b <branch-name> <commitId>

删除一个已经合并的分支

1git branch -d <branch-name>

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

1git branch -D <branch-name>

给当前提交打上标签,通常用于版本发布

1git tag <tag-name>

合并分支

merge后面的分支名称是将要被合并的分支,当前所在的分支就是合并后的目标分支。

1git merge <branch-name>

终止合并

一般情况下,如果两个分支的修改内容没有重合的部分的话,那么Git会帮我们自动完成合并,但是如果两个分支修改了同一个文件的同一行代码,Git就不知道应该保留哪个分支的修改内容了,也就产生了冲突,这个时候就需要我们手动来解决冲突。

1# 终止合并
2git merge --abort

远程操作

查看远程仓库

1# 查看当前仓库所对应的远程仓库的别名和地址
2git remote -v

添加远程仓库

1git remote add origin <repository_url>

推动到远程仓库

1git push origin <branch_name>

从远程仓库拉取更新

在执行完 git pull 命令之后,Git会自动为我们执行一次合并操作,如果远程仓库中的修改内容和本地仓库中的修改内容没有冲突的话,那么合并操作就会成功。否则,合并操作就会由于冲突而失败,这个时候就需要手动来解决一下冲突。

1git pull origin <branch_name>

查看

1git status
2
3git log
4
5git diff

回退版本

在日常开发的时候,经常会需要撤销之前的一些修改内容或者回退到之前的某一个版本,此时就可以使用 git reset 命令

git reset 命令有三种主要模式,它们分别是 --soft--hard--mixed。这些模式影响 Git的暂存区和工作区目录,以及当前分支的 HEAD指针。

  • --soft:表示回退到某一个版本(重置HEAD到指定的提交),并且保留工作区和暂存区的所有修改内容
  • --hard:表示回退到某一个版本,并且丢弃工作区和暂存区的所有修改内容。【谨慎使用】
  • --mixed:【默认模式】介于 soft 和 hard 这两个参数之间,它表示回退到某一个版本,并且只保留工作区的修改内容,而丢弃暂存区的修改内容。
模式 工作区 暂存区
git reset --soft
git reset --hard
git reset --mixed
1# 软
2git reset --soft
3# 硬
4git reset --hard 前8位
5# 混合
6git reset --mixed
1echo 111 > file1.txt
2echo 222 > file2.txt
3echo 333 > file3.txt
4
5# 将file1提交至暂存区
6git add file1.text
7git commit -m "commit1"
8# 将file2提交至暂存区
9git add file2.text
10git commit -m "commit2"
11# 将file3提交至暂存区
12git add file3.text
13git commit -m "commit3"
14
15# 查看提交历史
16git log --oneline
1cp -rf repo repo-soft
2cp -rf repo repo-hard
3cp -rf repo repo-mixed
4
5git reset --soft xxxxxxx
6git log --oneline
7
8# 查看工作区的内容,三个文件都存在
9ls
10# 查看file3文件内容
11cat file3.txt
12# 查看暂存区的内容,三个文件都存在
13git ls-files
14# 
15git status
1git reset --hard HEAD^
2# 查看提交历史,只有2次
3git log --oneline
4
5# 查看工作区的内容,发现file3不存在
6ls
7# 查看暂存区的内容,发现file3不存在
8git ls-files
1git reset HEAD^
2# 查看提交历史,只有2次
3git log --oneline
4# 查看工作区的内容,三个文件都存在
5ls
6# 查看暂存区的内容,发现file3不存在
7git ls-files

:::