1.git log
查看 提交历史
默认不用任何参数的话,git log
会按提交时间列出所有的更新,最近的更新排在最上面
2.git log -p -2
常用 -p
选项展开显示每次提交的内容差异,用 -2
则仅显示最近的两次更新;
3.git log --stat
仅显示简要的增改行数统计
4.放弃本次修改
git checkout .
#本地所有修改的。没有的提交的,都返回到原来的状态
git stash
#把所有没有提交的修改暂存到stash里面。可用git stash pop回复。
git reset --hard HASH
#返回到某个节点,不保留修改。
git reset --soft HASH
#返回到某个节点。保留修改
某个节点是哪个节点?
指某次提交的版本ID,一般输入前几位即可。查看某次提交的版本ID可以通过git log 的方法,也可以
通过git reflog来查看,git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),
包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录。
5.关于git reset --hard,git reset --soft,git reset --mixed的区别:
--hard 是本地代码,index,commmit都回退
--soft是代码保留,index保留,commit回退,可以随时提交;
--mixed是代码保留,index 和commit回退。
6.git revert
对于已经push的代码,回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致就要用到git revert.
- git revert用于反转提交,执行evert命令时要求工作树必须是干净的.
- git revert用一个新提交来消除一个历史提交所做的任何修改.
- revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)
revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
通常,前几位即可
git revert c011eb3
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
看似达到的效果是一样的,其实完全不同.
第一:
上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,git push可能导致一大堆冲突.但是revert 并不会.
第二:
如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三:
reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
7.git diff
7.1 比较工作区与暂存区
git diff 不加参数即默认比较工作区与暂存区
7.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff --cached [<path>...]
7.3 比较工作区与最新本地版本库
git diff HEAD [<path>...] 如果HEAD指向的是master分支,那么HEAD还可以换成master
7.4 比较工作区与指定commit-id的差异
git diff commit-id [<path>...]
7.5 比较暂存区与指定commit-id的差异
git diff --cached [<commit-id>] [<path>...]
7.6 比较两个commit-id之间的差异
git diff [<commit-id>] [<commit-id>]
7.7 使用git diff打补丁
git diff > patch //patch的命名是随意的,不加其他参数时作用是当我们希望将我们本仓库工作区的修改拷贝一份到其他机器上使用,但是修改的文件比较多,拷贝量比较大,
此时我们可以将修改的代码做成补丁,之后在其他机器上对应目录下使用 git apply patch 将补丁打上即可
git diff --cached > patch //是将我们暂存区与版本库的差异做成补丁
git diff --HEAD > patch //是将工作区与版本库的差异做成补丁
git diff Testfile > patch//将单个文件做成一个单独的补丁
拓展:git apply patch 应用补丁,应用补丁之前我们可以先检验一下补丁能否应用,git apply --check patch 如果没有任何输出,那么表示可以顺利接受这个补丁
另外可以使用git apply --reject patch将能打的补丁先打上,有冲突的会生成.rej文件,此时可以找到这些文件进行手动打补丁
学习无他法,唯有持之以恒
8.git fetch
$ git fetch <远程主机名>
要更新所有分支,命令可以简写为:
$ git fetch
上面命令将某个远程主机的更新,全部取回本地。默认情况下,git fetch
取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名,如下所示 -
$ git fetch <远程主机名> <分支名>
比如,取回origin
主机的master
分支。
$ git fetch origin master
所取回的更新,在本地主机上要用”远程主机名/分支名”的形式读取。比如origin
主机的master
分支,就可以用origin/master
读取。
取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。
$ git checkout -b newBrach origin/master
上面命令表示,在origin/master
的基础上,创建一个新分支:newBrach。
此外,也可以使用git merge
命令或者git rebase
命令,在本地分支上合并远程分支。
$ git merge origin/master
# 或者
$ git rebase origin/master
上面命令表示在当前分支上,合并origin/master
。
9.git rebase
暂时理解不了,以后再说。
10.误删分支怎么恢复
1)使用git log -g 找回之前提交的commit
2)使用git branch [新分支] commit_id 创建一个分支
3)切换到新分支,检查文件是否存在
11.git remote 命令
git remote show
命令加上主机名,可以查看该主机的详细信息。
$ git remote show <主机名>
git remote add
命令用于添加远程主机。
$ git remote add <主机名> <网址>
git remote rm
命令用于删除远程主机。
$ git remote rm <主机名>
git remote rename
命令用于远程主机的改名。
$ git remote rename <原主机名> <新主机名>