avatar

目录
How To Use Git
  • git fetchgit pull的关系图


一、Git 的 3 层结构

名称 解释
working directory 工作区
staging index 暂存区
git directory(Repository) 版本库

二、Git 中文件的 4 种状态基本状态

名称 解释
untracked 未被追踪的
modified 表示工作区修改了某个文件但是还没有添加到暂存区
Staged 表示把工作区修改的文件添加到了暂存区但是没有提交到版本库
Committed 表示数据被安全的存储在本地库中

三、vscode 中文件的 Git 状态提示

名称 解释
M 修改了文件但没有提交到暂存区
A 增加的文件
C 文件的一个新拷贝
D 删除的一个文件
M 文件的内容或者 mode 被修改了
R 文件名被修改了
T 文件的类型被修改了
U 文件没有被合并(你需要完成合并才能进行提交)
X 未知状态。(很可能是遇到 git 的 bug 了,你可以向 git 提交 bug report)

四、指令

配置指令

命令 解释
git config –list 查看配置信息
git config –global user.name Bill 配置用户信息姓名
git config –global user.email xxx@mail.com 配置用户信息邮箱
git log 查看提交日志
git log –oneline 查看提交日志一行一条记录

Git 提交

命令 解释
git add fileName 提交到暂存区
git commit -m “提交信息” 提交到版本库
git commit -am “提交信息” 一次性提交到版本库
git commit –amend 撤销上一次提交,并将暂存区的文件重新提交
git checkout – fileName 拉取暂存区的文件并将其替换工作区的文件
git reset HEAD fileName 拉取最近一次提交到版本库的这个文件到暂存区,该操作不影响工作区

Git 删除

方法一:先在文件资源管理器中删除文件,然后 git add .

方法二:git rm fileName

命令 解释
git rm -cached fileName 不小心把追踪的文件添加到暂存区,想删除暂存区的文件但是不修改工作区的文件
git rm -f fileName 工作区和暂存区都删除

Git 重命名

例如:修改 index.html 的文件名

命令 解释
mv index.html index1.html 一般重命名文件操作,Git 会看做是删除了旧文件,新建新文件,新文件的状态是 U(untracked)状态
git mv index.html index1.html 如果用 git mv,Git 会知道这是重命名了文件,改文件的状态是 R(rename)状态

Git 分支

命令 解释
git branch 查看分支
git branch dev 创建 dev 分支
git checkout dev 切换到 dev 分支
git branch -d dev 删除 dev 分支
git branch -m dev fix 修改 dev 分支的名称为 fix
git branch -d fix 删除 dev 分支
git checkout -b fix 撤销删除 fix 分支并切换到 fix 分支

Git 合并分支

先切换到 master 分支

命令 解释
git merge dev 当前分支与 dev 分支合并
  • 如果有冲突,即同一个文件同一行有不同的修改,将会提示用户手动决定用哪个版本
  • 实际多人协作开发时,合并时为 Fast-forward(快进式合并),即没有冲突

比较不同代码版本区别

命令 解释
git diff 比较工作区和暂存区的区别
git diff –staged 比较暂存区与版本库中的差异
git diff hashValue1 hashValue2 比较两个版本的差异
  • 例如当前为 master 分支,执行 git diff dev 可以比较当前分支和 dev 分支的差异

git stash

  • git stash 将当前工作去的文件暂存(不提交),然后切换分支。应用场景:当正在 dev 分支上开发某个项目,这时项目中出现一个 bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用 git stash 命令将修改的内容保存至堆栈区,然后顺利切换到 hotfix 分支进行 bug 修复,修复完成后,再次切回到 dev 分支,从堆栈中恢复刚刚保存的内容
命令 解释
git stash list 查看本地保存的代码列表
git stash pop stash@{1} 还原代码并删除本地保存
git stash drop stash@{0} 删除这个修改

Git 推送

命令 解释
git push https://xxx.git master 将本地的当前分支推送到远程的 master 分支上

git remote

命令 解释
git remote add myStudy git@gitee.com:xxx/studyGit.git myStudy 指代替代仓库地址
git remote -v 查看仓库地址
git remote remove myStudy 删除添加的指代单词

Git Tag (Release)

命令 解释
git tag 列出已有的 tag
git tag -l “v1.1” 加上-l 命令可以使用通配符来过滤 tag
git tag v1.0 新建 tag
git tag -a tagName -m “my tag” 还可以加上-a 参数来创建一个带备注的 tag,备注信息由-m 指定
git show tagName 查看 tag 的详细信息,包括 commit 号等
git tag -a v1.2 9fceb02 -m “my tag” 打 tag 不必要在 head 之上,也可通过 commit 号在之前的版本上打
git push origin v1.0 将 tag 同步到远程服务器
git push origin –tags 推送本地所有 tag
git checkout v1.0 跟分支一样,可以直接切换到某个 tag 去。
这个时候不位于任何分支,处于游离状态,可以考虑基于这个 tag 创建一个分支
git tag -d v0.1.2 删除某个 tag,本地删除
git push origin :refs/tags/v0.1.2 远端删除

Git 误删 commit 后的恢复方法

  • 1)通过 git log 可以查看我们之前提交的 commit_id

  • 2)复制你需要回滚的 commit_id。不过 windows 下的命令行是不能复制文本的,为此你可以到 github 上查看仓库的 commit 历史,上面是可以直接复制的,复制好后在命令行执行:git reset --hard commit_id

  • 3)执行: git push origin HEAD --force 提交当前 HEAD,这样就能够将错误的提交删除,回滚至其之前的代码

  • 但是如果当你回滚代码以后发现 commit_id 复制错了或者回滚错了怎么办呢?不要慌,按下面的方法做:

    • 1)执行:git reflog
      你能在命令行中看到你的历史操作,复制你要恢复操作最前面的 hash 值
    • 2)执行 git reset --hard hash 命令中最后要输的 hash 就是你要恢复的历史记录最前面黄色部分的 hash 值
      比如 git reset --hard 4458e09,这样就成功解决问题了。
文章作者: Bill
文章链接: http://blog.webpro.ltd/2020/02/10/how-to-use-git/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bill's blog

评论