git常用命令

以下内容中<参数>都表示输入参数,输入时不需要加<>

本地仓库相关

在某一文件夹内初始化git

1
git init

把工作区文件添加至暂存区

1
2
git add <文件名 或 通配符>
git add -u #将已跟踪的文件提交至暂存区

把暂存区文件提交至本地仓库

1
2
3
git commit -m "<对本次提交的描述>" #从暂存区提交
git commit -am "<对本次提交的描述>" #将已跟踪的文件提交至暂存区和仓库
git commit --amend -m "<对上次提交的描述修改>" #修改上次提交的描述,不加-m可进入vim编辑

查看当前仓库的状态(分支、文件、文件状态)

1
git status

回退版本

<输入参数>有:

  • —soft (保留工作区和暂存区仅回退版本)
  • —hard (回退版本、工作区、暂存区)
  • —mixed (回退功版本和暂存区,保留工作区)
1
git reset <输入参数>

查看差异

<输入参数>有:

  • 无: 工作区和暂存区的差异; 如果存在merge冲突,将在下面显示
  • HEAD:工作区和版本库的差异
  • — cache或—staged:暂存区和版本库的差异
  • <版本1 id> <版本2 id>:版本1和版本2之间的差异,这里可以用HEAD指代当前版本的id;HEAD~ 来指代上一个版本的id; HEAD~n 表示前n个版本的id;
  • <分支名1> <分支名2>:分支1和分支2间的差异
1
git diff <输入参数>

查看提交记录

<参数>:

  • —oneline, 这样只会显示哈希值的前几位。
  • —graph —oneline —decorate -all 查看分支图形式的提交记录
1
git log <参数>

查看暂存区文件

1
git ls-files

删除文件

1
2
3
git rm <文件名> #等效于删除某一文件后git add
git rm <文件夹> -r * #递归删除某个文件夹以及内部所有文件和子文件夹
git rm --cached <文件名> # 从暂存区删除,但保留在工作区

分支

  • branch 命令
1
2
3
4
5
git branch <分支名> #创建一个新的分支
git branch #查看当前的分支状态
git branch -d <分支名> #删除已经被合并的分支
git branch -D <分支名> #强制删除未被合并的分支
git branch -vv #查看本地分支时候和远程分支存在映射关系
  • switch 命令(同checkout)
1
2
git switch <分支名> #切换到某分支
git switch -b <分支名>
  • merge命令
1
2
git merge <分支名> #把输入名字的分支合并到当前分支
git merge --abort #终止合并

当合并冲突出现时,需要手动修改冲突内容,并使用git add + commit进行提交来合并分支

  • rebase命令
1
git rebase <分支名> #将<分支名>上由共同祖先到当前HEAD的所有提交记录,移动到当前分支的分支树上(直接变基在当前分支HEAD的顶上)

远程仓库相关

克隆仓库

1
git clone <仓库地址>

设置远程仓库

<输入参数>:

  • add <仓库别名,通常origin> <仓库地址>: 添加远程仓库
  • -v :查看本地仓库对应的远程仓库的别名和地址
  • rm <仓库别名>:删除远程仓库
1
git remote <输入参数>

设置远程仓库和本地仓库的分支映射关系

1
2
git branch --set-upstream <本地分支> <远程仓库名>/<远程分支> #将本地分支映射到远程主机的远程分支
git branch --set-upstream <本地分支> <远程仓库名> #将本地分支映射到远程主机的同名分支

拉取仓库

pull

<输入参数>:

  • <远程主机名> <远程分支>:<本地分支>: 将远程主机上的远程分支取回,并与本地分支合并

  • <远程主机名> <远程分支>: 将远程主机上的远程分支取回,并与当前的本地分支合并

    如果当前分支已经被设置了和远程分支的映射关系,则不需要输入参数

1
git pull <输入参数>

fetch

所有使用pull命令拉取的分支都会自动和本地分支合并,fetch则是先存在本地,等待人工merge合并

<输入参数>:

  • <远程主机名> <远程分支>:<本地分支(一般新建tmp分支)>: 将远程主机上的远程分支取回到本地工作区,不合并,需要主动$merge $
1
git fetch <输入参数>

上传仓库

1
2
3
4
5
6
7
8
9
git push <远程仓库名> <本地分支名>:<远程分支名> #把本地分支推送至远程
#在本地分支和远程分支同名时或设置了映射关系时,可省略远程分支
git push <远程仓库名> <本地分支名>
#推送当前分支时,可省略本地分支名
git push <远程仓库名>
#在本地分支只和一个远程仓库有映射关系时,可省略远程仓库名
git push

git push <远程仓库名> --delete <远程分支名> #删除远程仓库中的某一分支

git常用工作流

gitflow工作流模型

  • mian分支(核心分支):项目的可靠分支,可直接部署进生产环境,不允许直接修改,只能通过merge合并

    主分支的版本号命名规则:Major Version(主要功能或者重大版本更新);Minor Version(新功能改进和更新,不会影响现有功能);Patch Version(一些bug修复)

  • hotfix分支:bug的热修复分支,一般从主分支中分离出来,修复完成后合并至main分支和各个开发分支

  • develop分支(核心分支):开发分支,

  • feature分支:功能分支,用于开发新的功能的分支,新功能在稳定后会合并进开发分支。

  • release分支:发布前测试和验证的分支,由开发分支分离,当预发布分支稳定后,merge到主分支和开发分支并删除release分支。当预发布分支发现问题时,直接在预发布分支内进行修改。