1. 前言
本文记录一下常用的Git命令,方便以后查阅。
参考文档:
2. Git安装与配置
参考文档:《好好学Git:Git安装与配置》
3. pull代码
3.1. pull相关配置
.git/config
文件里,配置了remote和branch,以下为例。
1 | [core] |
拉取项目的时候,会根据这个配置来拉取。
3.2. pull相关命令
1 | # 查看本地分支追踪的远程分支 |
3.3. 解决冲突
问题描述:git pull 之后,出现冲突。
冲突文件中,包含:
1 | <<<<<<< HEAD |
其中,<<<<<<< HEAD 和 ======= 中间的是自己的代码;======= 和 >>>>>>> f406c5e398760c7d9116c8af31ea5748bd344abe 中间的是其他人修改的代码。
解决冲突办法:确定保留哪一部分代码,然后删除标志 <<<<<<< HEAD ,======= ,>>>>>>> f406c5e398760c7d9116c8af31ea5748bd344abe
详情参考文档《git branch》中的代码合并部分,原理是一样的。
4. fetch代码
拉取github的某个pr:
1 | git fetch origin pull/29/head:pr29 |
5. 分支操作
详情参考文档《git branch》
6. commit代码
6.1. 单行commit
1 | git add . |
6.2. 多行commit
1 | git add . |
6.3. 查看commit记录
1、最常用查看commit记录
1 | git log |
只可以查看到当前分支的commit日志,而且不能查看已经删除了的commit操作。
2、查看单个文件commit记录
1 | git log filename |
3、查看全局日志
1 | git reflog |
可以查看所有分支的所有操作记录,包括reset操作、checkout操作、已经删除了的commit操作等等。
4、查看所有分支的commit
1 | git log --graph --pretty=oneline --abbrev-commit |
7. 查看变更
7.1. commit之前
执行commit之前,查看修改了哪些文件。
1 | git status |
7.2. commit之后
执行commit之后,获取最近一次修改的文件列表
1 | git diff --name-only HEAD~ HEAD |
查看两次commit之间修改的文件
1 | git diff --name-only <commit-1> <commit-2> |
8. push代码
8.1. push分支
push命令格式:
1 | git push <远程仓库名> <本地分支名>:<远程分支名> |
上传代码到唯一远程追踪分支
1 | git push |
上传到指定远程追踪分支
1 | git push origin HEAD:branch_name |
8.2. 同时push多个git仓库
1、编辑 .git/config,添加
1 | [remote "all"] |
2、push代码
1 | git push all |
8.3. 同时push到多个git仓库的不同分支
1、添加多个远程仓库
1 | git remote add repo1 <远程仓库URL> |
2、push到多个远程仓库
1 | git push repo1 HEAD:main |
此时仍然需要两条命令。
3、配置别名
1 | git config alias.pushall '!git push repo1 HEAD:main && git push repo2 HEAD:master' |
配置别名错误的话,可以在配置文件中修改 .git/config
4、push到多个远程仓库
1 | git pushall |
8.4. push到其他git仓库
需求:已有仓库voidking,包含多个分支。现在想要把该仓库根据不同的分支拆分成多个项目,于是创建项目voidkingA和voidkingB。接下来,该怎么把voidking的不同分支,push到voidkingA和voidkingB呢?
1 | cd voidking |
8.5. git push 403
公司电脑(win10系统)以前有一个用户,github账号是haojin。现在电脑分配给我使用,但是,我的github账号是voidking,在我git push的时候报错403。
1 | $ git push |
哪怕重置了全局设置的user.name和user.email,依然会报错。
原因:win10系统自动保存用户凭据,gitpush的时候默认使用以前的用户凭据。
解决办法:Win+X,搜索,控制面板,用户账户,凭据管理器,管理Windows凭据,普通凭据,删除github的凭据即可。
9. 版本回退
版本回退常用git reset
和git revert
命令,这两个命令都是作用于当前分支(HEAD所在的分支)。git reset
是把HEAD向后移动了一下,而git revert
是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
9.1. reset
1、每个文件单独版本回退
1 | git status |
2、全部文件版本回退
1 | git reset --hard 1fe37e1bcbb894a1b594cf405ae31880cbaa6cd7 |
3、远程仓库回退
1 | git reset --hard 1fe37e1bcbb894a1b594cf405ae31880cbaa6cd7 |
4、回退后回退
reset后,回退版本之后的commit操作记录,都被删除掉了。
如果回退过之后又后悔了,那么,需要查看全局日志,然后再次执行reset操作。
1 | git reflog |
需要注意的是,版本回退,我们没有使用git checkout
。
假设当前在bugFix分支,使用git checkout
,理论上输入如下命令:
1 | git reflog |
这时,输入git log
,发现版本完美回退了。但是,这只是假象,输入git branch -a
,发现HEAD从bugFix分支切换到了a246dcd那个commit。而bugFix分支,没有进行任何改变。所以,我们不使用git checkout
进行版本回退,而是使用它进行历史版本的查看。
9.2. revert
1、全部文件版本回退
1 | git revert cf000 |
2、远程仓库回退
1 | git push origin HEAD:branch_name |
回退过之后又后悔了,那么,执行reset操作即可。
1 | git log |
10. git stash
本地有修改,但是想拉取远端仓库上的最新代码到本地。
1 | # 保存stash |
11. 统计
1 | # 统计个人代码量 |