文章目录
- git的使用手册
-
- 前言
- git初始化
- 添加文件
- 提交修改到版本库
- 通过邮件发送修改
- 查看文件之间的区别内容
- 查看哪些文件有修改
- 查看日志
- 引用日志
- 版本回退
- 从版本库中删除文件
- 远程库
- 分支操作
- 贮藏(stash)
- rebase命令
- 标签TAG
- 忽略文件
- git配置
- 命令撤销
- git报错记录
-
- Your local changes to the following files would be overwritten by merge
- LF will be replaced by CRLF in xxxxxxxxx
- fatal: ambiguous argument 'HEAD
- fatal: branch 'master' does not exist
- fatal: You are on a branch yet to be born
- git remote: HTTP Basic: Access denied
- Warning: you are leaving 1 commit behind, not connected to any of your branches:
- 关于github的pull request
- 试试Github Desktop
git的使用手册
前言
注:
- 根据个人理解画的图用于辅助理解,如有错误请指正。
- 如果可以看懂上面的图,而且命令都能够理解并使用。这篇文章的帮助应该不大。
- 这里只是展示了不同区域之间代码传递的时候使用的命令,使用的时候要注意具体参数。
- 所谓的不同区域大多是一个个的指针而已。
- 修改代码什么的均发生在工作区。
正式开始
git初始化
# 通过全局设置,设置git的用户名和邮箱,,,如果没有登录的话
git config --global user.name "username"
git config --global user.email "email"
git init
添加文件
相当于将工作区文件修改提交到暂存区
git add <filename>
git add . // 添加当前目录下所有被改变的的文件
提交修改到版本库
将暂存区的文件修改提交到本地版本库
git commit -m "message"
注意 -m 后面的message 必须用双引号,
追加提交
git commit -m " this is test amend commit"
git add < filename>
git commit --amend // 此命令会打开编辑窗口,用于编辑前一次的commit message。
上面的三个命令只会产生一个提交记录
通过邮件发送修改
导出修改
使用 git format-patch 命令。这个命令会将提交导出为电子邮件格式的文件。
将最近三次的提交,导出为文件:
git format-patch -3
也可以指定某一次的提交,或者某一个范围内的提交,可以使用 -o
来指定输出的文件夹
应用补丁修改
进入你想要导入提交记录的 Git 仓库的目录,然后运行 git am 命令,并指定补丁文件或包含补丁文件的目录:
git am --signoff < patch-file.patch
或者,如果补丁文件在一个目录中:
git am --signoff --directory=path/to/patches/
–signoff 选项会在每个补丁应用后添加一个 Signed-off-by 行,这通常用于表明开发者的同意
同时应用多个补丁
# windows 不支持 * 通配符,需要使用 Git Bash
git am ./temp/*.patch
查看文件之间的区别内容
// 工作区
git diff <filename> 工作区暂存区的区别
git diff <commid> <filename> 指定版本和工作区的区别。
// 暂存区
git diff --cached <filename> 工作区和版本库最新版本的区别
git diff --cached <commid> <filename> 指定版本和暂存区的区别。
// 版本之间
git diff <commid> <commitd> 查看两个版本之间的区别
查看哪些文件有修改
git status
这个命令可以用来查看哪些文件在工作区有修改,哪些修改已经提交到了暂存区。git diff
则是查看文件具体的修改
查看日志
显示日志
git log // 全量展示
git log --pretty=oneline // 将每条记录选取关键信息合成一行展示。
git log --abbrev-commit // 将commit id 显示为缩写。
git log --graph // ASCII图展示每次的提交所在分支以及分支分化衍合情况
git log -5 // 展示最近的五条数据提交记录
过滤日志
git log --author <authorName> // 按作者名过滤
git log --grep <commit message> // 按提交信息
git log -- <fileName> // 按文件名
以上的这参数可以组合使用
推荐使用如下配置
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
执行上面的命令之后,就可以直接git lg
就可以显示格式化好之后的日志了。
引用日志
git reflog 查看所有版本操作相关的,例如版本回退等等的记录,也就是HEAD指针指向的位置的历史记录,即ref的log,即对版本库中的代码的增删改查记录。
reflog 是存储于本地的日志并不会共享。
版本回退
在git 中HEAD表示当前的版本,HEAD^ 表示上一个版本,HEAD^^ 表示上上个版本。较多的试试直接用数字指定。例如:HEAD~10。
注意:^ 字符是windows的cmd.exe 中的元字符。windows下使用HEAD^可能会报错
fatal: ambiguous argument 'HEAD
': unknown revision or path not in the working tree.
这时要使用HEAD"^ “或者"HEAD^”,来避免它。
例如
git reset --hard HEAD^ 强制回退上一版本
git reset --hard HEAD~1
git reset --hard < commit id> 默认为HEAD
以下操作慎用,命令使用之后不一定能够有反悔的机会。因为只有在对版本库中的文件进行增删改查的时候,在git log或者git reflog中才会有日志记录。尤其在使用–hard 的时候更有可能会直接无提示的清空掉工作区和暂存区的数据
-
从工作区撤销修改
将该文件在工作区的修改全部撤销,相当于将工作区的文件修改为和暂存区的一致。git checkout -- < filename>
filename 是必填的
-
从暂存区撤销修改
如果文件已经提交到了暂存区,首先需要撤销暂存区的修改,git reset HEAD < filename>
将暂存区的修改回退到工作区,然后根据需要决定是否撤销工作区的修改,如果需要继续撤销,参考上一条。
-
从本地版本库撤销修改
git reset <options> <commit id> // 回退 options 默认为mixed commit id默认为HEAD git reset --mixed 保留工作区,把暂存区的改变回退到工作区,移动HEAD指针,暂存区和HEAD指针的版本一致。 git reset --soft 保留工作区和暂存区,仅移动HEAD指针,所有的reset都会执行这个操作。 git reset --hard 清空工作区和暂存区的改变。移动HEAD指针,暂存区与工作区和HEAD指针的版本一致。 git reset --merge 如果暂存区为空,此命令无效果。如果工作区和暂存区存在对同一文件的修改则会失败。一个文件工作区无修改,暂存区存在修改的时候生效,即工作区和暂存区相同但是还没有提交到版本库。此命令会清空工作区和暂存区。移动HEAD指针。这类文件的暂存区和工作区同步为HEAD指针的版本一致。 git reset --keep 保留工作区,把暂存区的改变也回退到工作区,移动HEAD指针,暂存区和HEAD指针的版本一致。
–mixed 和 --keep的区别在于,恢复到历史版本的时候,如果工作区或者暂存区存在修改的文件在要恢复历史版本和HEAD指向的版本之间存在不同,mixed会直接恢复,–keep会失败。
-
撤销远程库修改
先撤销本地的修改,然后推送到远程库即可。
git push -f // 强制推送到远程库 慎用---可能会被打
-
只恢复指定版本的内容其他版本不变。可以使用revert(反做)命令。
git revert <commit ID