Git - 常用命令
笔记
下面我们学习 Git 在本地常用的命令,也是开发经常用到的命令。
2022-02-08 @Young Kbt
# Git常用命令
# 本地命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名(-A 代表目录及子目录下所有文件名) | 添加到暂存区 |
git commit -m "日志信息" [文件名](不加文件名,默认所有文件都添加该日志信息) | 添加到本地库 |
git reflog | 查看历史记录(简要) |
git log | 查看历史记录(详细) |
git log --pretty=oneline | 一行显示一个版本信息(版本号完整) |
git log --oneline | 一行显示一个版本信息(版本号简写) |
git reset --hard 版本号 | 版本穿梭、跳转 |
git diff [文件名] | 比较工作区中和暂存区的文件 |
git diff [本地库中历史版本] [文件名] | 比较工作区中的文件和本地库历史记录 |
git branch 分支名 | 创建分支 |
git branch -D 分支名 | 删除分支 |
git branch -m 新的分支名 | 将当前分支名改为新的分支名 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 合并分支 |
# 远程命令
命令名称 | 作用 |
---|---|
git remote -v | 查看当前所有远程地址别名 |
git remote add 别名 远程地址 | 起别名 |
git push 别名 分支 | 推送本地分支上的内容到远程仓库 |
git clone 远程地址 | 将远程仓库的内容克隆到本地 |
git pull 远程库地址别名 远程分支名 | 将远程仓库对于分支最新内容拉下来后与 当前本地分支直接合并 |
如果 git push
不加别名和分支,默认别名是 origin,分支是 master。
我们 clone 项目会自动做如下操作:
- 拉取代码
- 初始化本地仓库
- 创建别名,默认是
origin
具体看 Git - SSH免密登录。
# 设置用户签名
# 项目级别/仓库级别
仅在当前本地库范围内有效。
git config user.name 用户名
git config user.email 邮箱
2
信息保存位置:./.git/config
文件里。
# 系统用户级别
登录当前操作系统的用户范围。
git config --global user.name 用户名
git config --global user.email 邮箱
2
信息保存位置:设置了用户签名,会在用户盘下生成 .gitconfig
文件,里面也可以直接修改自己的信息。
# 级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许
# 说明
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。
邮箱可以是虚拟邮箱,Git 不会去识别。
注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。
# 初始化本地库
基本语法:
git init
该指令会将目录下的所有子目录以及文件交给 Git 管理,也是我们使用 Git 最重要的一步。
执行该指令后,会在当前目录下生成 .git
目录,该目录默认是隐藏的。
注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。
# 查看本地库状态
查看工作区、暂存区状态。
基本语法:
git status
可以看到,我删除了 3 个文件,还没有放到暂存区(红色),存到了暂存区(绿色),存到了本地库(消失)。
# 文件增删改操作
# 删除暂存区的文件
git rm --cached 文件名
# 添加文件到暂存区
git add 文件名
git add -A # -A 代表全名文件
2
# 提交文件到本地库
git commit -m "日志信息" [文件名] # 文件名可不写
# 历史版本操作
# 查看历史版本
git log # 查看详细版本信息
git reflog # 查看简要版本信息
git log --pretty=oneline # 一行显示一个版本信息(版本号完整)
git log --oneline # 一行显示一个版本信息(版本号简写)
2
3
4
多屏显示控制方式:
空格向下翻页
b 向上翻页
q 退出
# 切换历史版本
基于索引值操作[推荐]
git reset --hard [局部索引值] git reset --hard a6ace91 # 例子
1
2使用 ^ 符号:只能后退
git reset --hard HEAD^
1注:一个 ^ 表示后退一步,n 个表示后退。
使用 ~ 符号:只能后退
git reset --hard HEAD~n
1注:表示后退 n 步。
使用 HEAD 符号,恢复当前提交本地库的版本
git reset --hard HEAD
1注:在当前版本中删除了某个文件,可以恢复到当前最初的版本。
reset 命令的三个参数对比
--soft
参数- 仅仅在本地库移动 HEAD 指针
--mixed
参数- 在本地库移动 HEAD 指针
- 重置暂存区
--hard
参数- 在本地库移动 HEAD 指针
- 重置暂存区
- 重置工作区
# 比较文件操作
将工作区中的文件和暂存区进行比较
git diff [文件名]
将工作区中的文件和本地库历史记录比较
git diff [本地库中历史版本] [文件名]
不带文件名则比较多个文件。
如果 [本地库中历史版本] 是 HEAD
,则比较当前版本。
# 分支操作
# 什么是分支?
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
# 分支的好处?
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
# 分支操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -D 分支名 | 删除分支 |
git branch -m 新的分支名 | 将当前分支名改为新的分支名 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 合并分支 |
创建分支
git branch [分支名]
删除分支
git branch -D 分支名
将当前分支名改为新的分支名
git branch -m 新的分支名
查看分支
git branch -v
切换分支
git checkout [分支名]
合并分支
第一步:切换到接受修改的分支(被合并,增加新内容)上
git checkout [被合并的分支名]
1第二步:执行 merge 命令
git merge [有新内容的分支名]
1
# 分支冲突
产生冲突
冲突的表现:后面状态为 MERGING
冲突产生的原因:合并分支时,两个分支在 同一个文件的同一个位置 有两套完全不同的修改。Git 无法替 我们决定使用哪一个。必须 人为决定 新代码内容。
冲突如图(修改的是同一个位置):
解决冲突
冲突的解决:
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:添加到暂存区,
git add [文件名]
第四步:执行提交,
git commit -m "日志信息"
(注意:此时 commit 一定不能带具体文件名)
# 创建分支和切换分支图解
master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。
HEAD 如果指向 master,那么我们现在就在 master 分支上。
HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。
# 分支进阶操作
# 删除所有记录
想清空所有 commit 的信息记录,就像形成一个全新的仓库,且代码不变。
先切换到新的分支
git branch kele git checkout kele
1
2添加所有文件到暂存区(除了 .gitignore 中排除的)
git add -A
1提交跟踪过的文件到本地库
git commit -am "commit message"
1删除 master 分支
git branch -D master
1重命名当前分支为 master
git branch -m master
1提交到远程 master 分支
git push -f origin master
1
# 删除上次记录
如果只是想修改上次提交的代码,做一次更完美的 commit,可以这样:
回到到上个版本(注:不要带
--hard
)git reset commitId
1暂存修改
git stash
1强制 push,这样远程的最新的一次 commit 被删除
git push --force
1释放暂存的修改,开始修改代码
git stash pop
1添加、推送
git add git commit -m "massage" git push
1
2
3
# 同时修改本地分支名和对应的远程分支名
修改前要确保本地分支的代码是最新的,并且修改后不会影响到同事的代码。
- 修改本地分支名
git branch -m oldBranchName newBranchName
- 删除远程分支
git push origin :oldBranchName
- 改名后的本地分支推送到远程
git push --set-upstream origin newBranchName