git 常用命令
基于上面的图片,我们来了解一些概念
- 版本库
.git
文件
- 当我们使用git管理文件时,比如git init时,这个时候,会多一个.git文件,我们把这个文件称之为版本库。
- 另外一个作用就是它在创建的时候,会自动创建master分支,并且将HEAD指针指向master分支。
- 工作区
- 本地项目存放文件的位置
- 可以理解成图上的workspace
- 暂缓区(Index/Stage)
- 顾名思义就是暂时存放文件的地方,通过是通过add命令将工作区的文件添加到缓冲区
- 本地仓库(Repository)
- 通常情况下,我们使用commit命令可以将暂存区的文件添加到本地仓库
- 通常而言,HEAD指针指向的就是master分支
- 远程仓库(Remote)
- 举个例子,当我们使用GitHub托管我们项目时,它就是一个远程仓库。
- 通常我们使用clone命令将远程仓库代码拷贝下来,本地代码更新后,通过push托送给远程仓库。
常见命令
- 查看本地分支 -
git branch
- 查看远程分支 -
git branch -r
- 查看本地和远程分支 -
git branch -a
- 从当前分支,切换到其他分支 -
git checkout <branch-name>
- 创建并切换到新建分支 -
git checkout -b <branch-name>
- 删除本地分支 -
git branch -d/-D <branch-name>
- 当前分支与指定分支合并 -
git merge <branch-name>
- 删除远程分支 -
git push origin -d <branch-name>
或git push origin :<brnach-name>
- 重命名分支 -
git brnach -m <oldbranch-name> <newbranch-name>
- 拉取远程分支并创建本地分支 -
git checkout -b 本地分支名 origin/远程分支名x
或git fetch origin <branch-name>:<local-branch-name>
- 远程仓库内容更新到本地 -
git fetch
- 命令用于从远程获取代码并合并本地的版本 -
git pull
- 查看提交历史 -
git log
git文件状态 -
git status
changes not staged for commit
- 表示得大概就是工作区有该内容,但是缓存区没有,需要我们git add (红色)changes to be commit
- 表示文件放在缓存区了,我们需要git commit。(绿色)nothing to commit,working tree clean
- 这个时候,我们将本地的代码推送到远端即可 (无文件)
花式撤销
- 撤销「工作区」修改 -
git checkout -- <file>
- 暂存区文件撤销 (不覆盖工作区) -
git reset HEAD <file>
版本回退 -
git reset --(soft | mixed | hard ) < HEAD ~(num) >
- 回退到上一个版本
git reset --hard HEAD^
- 回退到历史中某个版本
git reset --hard commit_id
- 回退到上一个版本
使用场景:
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步
- 第一步:用命令
git reset HEAD <file>
,就回到了场景1; - 第二步:按场景1操作。
- 第一步:用命令
- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,需要版本回退一节,不过前提是没有推送到远程库。
差异比较
- 比较工作区与缓存区 -
git diff
- 比较工作区与本地最近一次commit内容 -
git diff HEAD
- 比较两个commit之间差异 -
git diff <commit ID> <commit ID>
- 比较两个分支的内容 -
git diff 分支1 分支2
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
忽略文件 .gitignore
这个文件的作用,会去忽略一些不需要纳入Git管理这种,我们也不希望出现在未跟踪文件列表。
# 此行为注释 会被Git忽略
# 忽略 node_modules/ 目录下所有的文件
node_modules
# 忽略所有.vscode结尾的文件
.vscode
# 忽略所有.md结尾的文件
*.md
# 但README.md 除外
!README.md
# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为txt文件
doc/**/*.txt
提交代码
- git status - 查看修改文件(如果有误修改文件使用
git checkout
撤回) - git diff - 查看修改内容
- git add . - 将内容添加到缓存区
- git status - 确定添加到缓存区的文件
- git push origin <分支名称> - 添加到远程仓库
合并上线流程
- git fetch - 拉取远程分支(获取到要合并的分支)
- git checkout <要合并的分支>
- git pull origin <要合并的分支>
- git checkout qa/develop
git merge <要合并的分支>
- 无冲突 - 执行 6
- 有冲突 - 先解决冲突,解决完冲突之行
git add
、git commit
- git push origin qa/develop
- 如果上线则需把develop合并到release
- 添加白名单
参考
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。