Git常用命令

1 概述 git命令的工作流程

1.png
  • workspace: 本地的工作目录。(记作A)
  • index:缓存区域,临时保存本地改动。(记作B)
  • local repository: 本地仓库,只想最后一次提交HEAD。(记作C)
  • remote repository:远程仓库。(记作D)

2 命令笔记

采用上述的标记的A、B、C、D的方式来阐述

2.1 初始化

git init //创建
git clone /path/to/repository //检出
git config --global user.email "you@example.com" //配置email
git config --global user.name "Name" //配置用户名

2.2 操作

git add <file> // 文件添加,A → B
git add . // 所有文件添加,A → B
git commit -m "代码提交信息" //文件提交,B → C
git commit --amend //与上次commit合并, *B → C
git push origin master //推送至master分支, C → D
git pull //更新本地仓库至最新改动, D → A
git fetch //抓取远程仓库更新, D → C
git log //查看提交记录
git status //查看修改状态
git diff//查看详细修改内容
git show//显示某次提交的内容

2.3 撤销操作

git reset <file>//某个文件索引会回滚到最后一次提交, C → B
git reset//索引会回滚到最后一次提交, C → B
git reset --hard // 索引会回滚到最后一次提交, C → B → A
git checkout // 从index复制到workspace, B → A
git checkout -- files // 文件从index复制到workspace, B → A
git checkout HEAD -- files // 文件从local repository复制到workspace, C → A

2.4 分支相关

git checkout -b branch_name //创建名叫“branch_name”的分支,并切换过去
git checkout master //切换回主分支
git branch -d branch_name // 删除名叫“branch_name”的分支
git push origin branch_name //推送分支到远端仓库
git merge branch_name // 合并分支branch_name到当前分支(如master)
git rebase //衍合,线性化的自动, D → A

2.5 冲突处理

git diff //对比workspace与index
git diff HEAD //对于workspace与最后一次commit
git diff <source_branch> <target_branch> //对比差异
git add <filename> //修改完冲突,需要add以标记合并成功

2.6 其他

gitk //开灯图形化git
git config color.ui true //彩色的 git 输出
git config format.pretty oneline //显示历史记录时,每个提交的信息只显示一行
git add -i //交互式添加文件到暂存区

3 .gitignore规则无效

解决.gitignore文件忽略规则无效git依然跟踪修改的问题

3.1 .gitignore规则无效的原因

  • 一种是忽略规则的语法错误
  • 另一种:项目中的文件或目录已经被纳入到Git的版本管理里面/跟踪文件清单,此时你再往.gitignore里添加此文件/目录的忽略规则就会发现毫无作用,因为已经被Git跟踪(track)的文件/目录无法被.gitignore忽略掉
  • 已经被纳入到Git的版本管理里面/跟踪文件清单
      1. 已使用add命令开始跟踪项目文件或者将修改的文件放入暂存区/索引
      1. 已使用commit命令提交更新到本地仓库
      1. 已使用push命令将项目文件推送到了Git远程仓库了(例如GitHub)

上述的三种操作只要进行了其中一项,再添加对应文件的忽略规则都是不生效的

3.2 具体的解决方法

3.2.1 未进行提交操作的处理方式

  • 如果此时还未进行提交操作,赶紧使用如下命令可及时挽救:git rm --cached <file>,其中<file>表示要从暂存区移除出去的文件名或者目录路径,注意可以使用通配符。
  • 不过Git有自己的通配符规则,所以要注意下差异,例如官方文档有提到在*号前面是需要加反斜杠\的(我有测试过不加也没事但是最好按照规范来),结合上面的案例,因为我们要移除bin文件夹下的所有文件,所以完整的Git命令为(注意路径一定要正确):
git rm --cached WebApplication1/WebApplication1/bin/\*

这里要留意忽略规则的添加时机,在命令执行后会有不同的影响,假设忽略规则是在git rm --cached <file>命令执行前就设置了,那么当命令执行完成后马上就可以看到效果,bin文件夹及里面的所有文件会被Git直接忽略。如果在命令执行后还没有添加忽略规则,你会发现bin文件夹下的文件变成未被跟踪的状态,也就是最初的状态,此时你再添加忽略规则这些文件就会被忽略了。

3.2.2 本地缓存删除

解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

参考

Git常用命令

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容