git命令汇总 | 青训营笔记

153 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

基本概念

  • 版本库.git文件:当我们使用git管理文件时,一般会有一个git文件,叫做版本库
  • 工作区:本地项目存放文件的位置
  • 暂存区:通过add命令可以将工作区文件添加到暂存区,相当于缓冲区的一个概念
  • 本地仓库:我们可以使用commit将暂存区的文件添加到本地仓库
  • 远程仓库:比如我们使用Github来托管我们的项目,它就是一个远程仓库

查看文件状态

git status

常见状态

  • Changes not staged for commit 表示暂存区没有内容,需要通过git addi添加
  • Changes to be committed 文件已经在暂存区了,需要我们提交到本地仓库
  • nothing to commit, working tree clean 这时,可以通过push,将代码提交到远程仓库

配置命令

git config --list   // 列出当前配置
git config --local --list // 列出本地仓库配置
git config --global --list // 列出全局配置
git config --system --list // 列出系统配置

配置全局用户名和邮箱

git config --global user.name "name"
git config --global user.email "xxx@xxx.com"

为单个仓库配置用户名和邮箱

git config user.name "name"
git config user.email "xxx@xxx.com"

查看用户名和邮箱

git config user.name
git confit user.email

分支管理

查看本地分支

git branch

查看远程分支

git branch -r

查看本地和远程分支

git branch -a

切换分支

git checkout branch-name

创建并切换分支

git checkout -d branch-name

将指定分支合并到当前分支

git merge branch-name

删除远程分支

git push origin -d branch-name

分支重命名

git branch -m orderName newName

基本操作

git init // 初始化
git add <filename> // 将文件添加到暂存区
git commit -m "message" // 将暂存区文件提交到本地仓库
git push <远程主机名> <本地分支名>:<远程分支名> // 拉取远程仓库到本地
git fetch <远程主机名> <分支名> // 拉取远程仓库到本地
git fetch <远程主机名> <远程分支名>:<本地分支名> // 拉取远程仓库到本地

查看历史记录

git log

多屏显示的控制方式 空格向下翻页 b 向上翻页 q退出

git log --pretty=oneline

将一条记录显示在一行

git log --oneline

比git log --pretty=oneline更简洁

git reflog

HEAD@{移动到当前版本需要多少步}

版本前进后退

git reset --hard 哈希值

其他方式(只能后退)

git reset --hard HEAD^[几个异或向后退几步]

git reset --hard HEAD~[后退几步]

reset命令的三个参数对比

--soft参数

仅仅在本地库移动HEAD指针

--mixed参数

在本地库移动HEAD指针

重置暂存区

--hard参数

在本地库移动HEAD指针

重置暂存区

重置工作区

.gitignore

如果我们有不需要进行版本控制的文件,可以将文件路径写入.gitignore文件,git会将.gitignore中的文件忽略

# 忽略code目录下所有文件
code/
# 忽略所有.txt结尾的文件 
*.txt
# 但不忽略a.txt
!a.txt
# 会忽略 doc/*.txt 但不会忽略doc/**/*.txt 
doc/*.txt 
# 忽略 doc/ 目录下所有扩展名为txt文件 
doc/**/*.txt

比较文件差异

git diff[文件名]

将工作区中的文件和暂存区进行比较

git diff[本地库中历史版本] [文件名]

将工作区中的文件和本地库历史记录比较

cherry-pick

对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。

这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 Cherry pick。

基本用法

git cherry-pick命令的作用,就是将指定的提交应用于其他分支

// 这条命令会将commitHash对应的提交,用应用于当前分支,并在当前分支上产生一个新的提交
git cherry-pick <commitHash>

举例来说,代码仓库有masterfeature两个分支。


    a - b - c - d   Master
         \
           e - f - g Feature

现在将提交f应用到master分支。


# 切换到 master 分支
$ git checkout master

# Cherry pick 操作
$ git cherry-pick f

上面的操作完成以后,代码库就变成了下面的样子。


    a - b - c - d - f   Master
         \
           e - f - g Feature

从上面可以看到,master分支的末尾增加了一个提交f

cherry-pick可以一次转移多个提交

git cherry-pick <commitHashA> <commitHashB> ... // 将A B两个提交应用到当前分支

转移一串的提交

git cherry-pick A..B
// 可以转移从 AB 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。

但上面的命令不会包含A,如果需要包含A,则需要使用以下命令

git cherry-pick A^..B 

可选项

git cherry-pick命令的常用配置项如下。

-e--edit

打开外部编辑器,编辑提交信息。

-n--no-commit

只更新工作区和暂存区,不产生新的提交。

-x

在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。

-s--signoff

在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。

-m parent-number--mainline parent-number

如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。

-m配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。

git cherry-pick -m 1 <commitHash>

上面命令表示,Cherry pick 采用提交commitHash来自编号1的父分支的变动。 一般来说,1号父分支是接受变动的分支,2号父分支是作为变动来源的分支。