git fetch
和git 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
,这样就成功解决问题了。
- 1)执行: