一、git常用命令
1. 正常流程
# 将全部修改添加到暂存区
git add .
# 提交到本地版本库
git commit -m '解释所做的修改'
# 提交到远程xx分支
git push origin xx
# 第一次拉取别人的代码
git clone XXX
# 查看分支情况(会指明当前所在分支以及已有的相关分支)
git branch
# 新建名为new的分支
git branch new
# 切换到dev分支
git checkout dev
# 直接拉取远程版本库中dev分支代码到当前工作区
git pull origin dev
# 先拉取dev分支的代码到本地版本库,然后合并到当前工作区(==git pull)
git fetch origin dev
git merge dev
# 查看文件当前状态(会显示出所有修改过的,还未提交到远程版本库的文件状态)
git status
# 丢弃工作区中对xxx文件的修改(注意短横线前后要有空格)
git checkout -- xxx
# 查看历史提交情况(加--graph看起来更清晰一点)
git log --graph
# 把分叉的提交历史“整理”成一条直线,看上去更直观(自我感觉就是按push到远程的时间前后将提交进行了排序,治强迫症的)
git rebase
2. 分支操作及其上传
# 修改本地分支名
git branch -m oldName newName
# 删除远程分支
git push --delete origin oldName
# 上传本地分支到远程同名分支
git push origin HEAD
# 将本次修改和上一次commit合并,作为一个commit提交到history区
git commit --amend
# 撤销某个stage里的文件修改,会保存在工作区,变为unstage状态
git reset a.txt = git reset --mixed HEAD a.txt
# 合并多个commit
git reset 17bd20c # 回退到某次提交,不会改动代码,将之前的代码全放在工作区
git add . # 将工作区内容直接add, commit
git commit -m 'balabala'
# 查看所有关键操作日志,能看到reset一集所有commit的hash值
git reflog
# Git 远程分支强制覆盖本地分支
# 更新所有的远程仓库信息
git fetch --all
# 强制重置为 origin/master(可以换成你需要的远程分支) 远程分支
git reset --hard [origin/master]
# 拉取最新代码
git pull
二、git不常用命令
其实就是遇到问题才来 修改的命令(对,菜是原罪)
1、修改配置文件
git配置级别 | 优先级 | 参数选项 | Windows位置 |
---|---|---|---|
仓库级别 | 最高 | --local | 具体仓库下的.git/config 【“.”开头的文件为隐藏文件,默认不可见,需要先打开显示隐藏文件】 |
用户级别 | 次之 | --global | 用户宿主目录下的~/.gitconfig 【宿主目录:用户自己的目录,比如我的C:\Users\asus】 |
系统级别 | 最低 | --system | git安装目录下的 /etc/gitconfig 【但是我的是在git安装目录\Git\mingw64\etc目录下】 |
配置生效过程:
- Git 使用一系列配置文件来保存你自定义的行为。 它首先会查找
/etc/gitconfig
文件,该文件含有系统里每位用户及他们所拥有的仓库的配置值。 如果你传递--system
选项给git config
,它就会读写该文件。 - 接下来 Git 会查找每个用户的
~/.gitconfig
文件(或者~/.config/git/config
文件)。 你可以传递--global
选项让 Git 读写该文件。 - 最后 Git 会查找你正在操作的版本库所对应的 Git 目录下的配置文件(
.git/config
)。 这个文件中的值只对该版本库有效。 - 以上三个层次中每层的配置(系统、全局、本地)都会覆盖掉上一层次的配置,所以
.git/config
中的值会覆盖掉/etc/gitconfig
中所对应的值。
配置文件常用命令:
# 查看git配置文件
git config -l
# 查看系统级别配置文件(其他级别类似)
git config --system -l
# 获取单个配置项(--get)
git config [--local|--global|--system] --get section.key (默认是获取local配置中内容)
# 增加配置项(--add)
git config [--local|--global|--system] --add section.key value (默认是添加在local配置中)
# 编辑单个配置项(git config --global user.name “Your Name”)
git config [--local|--global|--system] section.key value
# 进入文件编辑配置项(-e | --edit)
git config --local -e
# 删除配置项(--unset)
git config [--local|--global|--system] --unset section.key
# 查看git配置的帮助文档
git config --help
正常使用中遇到的问题:
clone在GitHub的repo时,提示以下index-pack failed错误
# 错误提示:
...
fatal: the remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
# 解决方法一:
git config --add core.compression -1
git clone xxx
# 解释:
compression是压缩的意思,
从clone 的终端输出就知道,服务器会压缩目标文件,然后传输到客户端,客户端再解压。
取值为 [-1, 9],-1 以 zlib 为默认压缩库,0 表示不进行压缩,1..9 是压缩速度与最终获得文件大小的不同程度的权衡,
数字越大,压缩越慢,当然得到的文件会越小。
# 解决方法二:
用ssh克隆
Git 遇到了 early EOF index-pack failed 问题
2. 同步一个fork
# 查看远程状态(没有配置远程的fork仓库时,只有origin 的两个,一个 fetch 和一个 push)
git remote -v
# origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
# 添加一个将被同步给fork远程的上游仓库(结束后再次查看远程状态,应该会多出来fork的内容)
git remote add 自定义名称 远程的fork仓库的地址
# origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
# upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
# upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)
# 从上游仓库 fetch 分支和提交点,存储在本地的 upstream/master
git fetch upstream
# 切换到本地主分支,将 upstream/master 合并到本地 master
git checkout master
git merge upstream/master
# 更新到远程的fork上
git push origin master
三、遇到的异常问题
1、git 提交报错 index.lock 文件存在
问题原因:
不详,遇到过两次,但是都不知道是什么造成的
解决方法:
删除当前项目中.git目录中的index.lock文件。.git是隐藏目录,需要设置展示隐藏目录才能看见