美文网首页
Git高级命令

Git高级命令

作者: 青果果 | 来源:发表于2017-11-30 22:47 被阅读0次

命令 1:查看历史记录 git log

可以查看所有提交记录


如果想看更加详细的信息可以用 git log -p 可以看到所有细节
如果只想看下大致修改内容可以用git log --stat
如果想看某个提交的详细信息可以用git show + id
如果想以标准格式输出日志git log -g
git log -g标准格式输出日志

命令 2:git commit --amend

适用场景: 提交后发现有错误,修正
释义: "amend" 是「修正」的意思,git commit 加上 -- amend参数的时候并不是在
当前commit上增加一个commit,而是会把当前commit的内容和暂存区里的内容合并起来
创建一个新的commit,并用这个新的commit替换掉当前commit
git log将不会看到上次的commit id了,因为已经把它修改,相当于擦除

命令3 : git reset --hard HEAD^

适用场景:提交后修正都不想,写的太烂了,直接丢弃
就可以使用 git reset --hard HEAD^ reset 有重置的意思,
相当于重置工作目录到最新提交的上一次
HEAD就是当前commit的引用,HEAD^表示的HEAD的父commit

reset 不止可以用来丢弃最新的提交,了解它的本质就知道它其他的用途

reset 的本质:移动 HEAD 以及它所指向的 branch

  • reset --hard:重置工作目录,工作目录里的内容会被完全重置为和 HEAD 的新位置相同的内容,未提交的内容会被全部擦除掉(谨慎使用,除非确保工作目录里面的内容都不要了)

  • reset --soft:保留工作目录,会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区

  • --mixed(默认):重置位置的同时,保留工作目录的内容,并清空暂存区。

  • reset 不加参数:默认使用 --mixed 参数 保留工作目录,并清空暂存区

命令4 : git reabse

merge 之后,commit 历史就会出现分叉,这种分叉再汇合的结构会让有些人觉得混乱
可以用 rebase 来代替 merge,就不会出现分叉

感觉文字描述已经不能比动态图更好,直接用图解

git merge branch1 //合并分支,是站在master上合并branch1
git merge branch1的图解--来自扔物线

如果把 merge 换成 rebase,可以这样操作:

git checkout branch1//签出分支branch1 HEAD 指向了 branch1
git rebase master //站在branch 1上 rebase操作
git rebase master的图解--来自扔物线
可以看出,通过 rebase,5 和 6 两条 commits 把基础点从 2 换成了 4 。
通过这样的方式,就让本来分叉了的提交历史重新回到了一条线。
这种「重新设置基础点」的操作,就是 rebase 的含义。

另外,在 rebase 之后,记得切回 master 再 merge 一下,把 master 移到最新的 commit

git checkout master //签出到master分支
git merge branch1
merge
上面的动态图清晰的描述了git checkout branch名 的本质,其实是把 HEAD 指向指定的 branch,
然后签出这个 branch 所对应的 commit 的工作目录

同样的,checkout 的目标也可以不是 branch,而直接指定某个 commit:...
可以直接指定 commit 作为参数,来把 HEAD 移动到指定的 commit

综上:checkout 的本质是签出指定的 commit

checkout和reset的区别

checkout 和 reset 都可以切换 HEAD 的位置,它们除了有许多细节的差异外,最大的区别在于:
reset 在移动 HEAD 时会带着它所指向的 branch 一起移动,而 checkout 不会。
当你用 checkout 指向其他地方的时候,HEAD 和 它所指向的 branch 就自动脱离了...

和 merge 是不同的,rebase 是站在需要被 rebase 的 commit 上进行操作
所以前面需要先切到分支再rebase

命令5 : git pull --reabse

那就先看看git pull,我们都知道是同步代码,拉取远程最新的代码
git pull命令其本质是:把远程仓库使用git fetch 取下来以后再进行 git merge操作的

如果本地什么都没有修改 git pull 其实是和git fetch一样的

如果本地有修改,就会做merge 操作,用命令操作的话可能就会弹出编辑框,有一条默认的merge信息,相当于产生了一个新的commit,可以使用自动的merge信息,也修改merge信息

所以如果合并算法能解决的 产生冲突的话,需要先解决冲突

git pull rebase
如果在本地什么都没有修改的情况下git pull rebasegit pullgit fetch都是一样的
有修改的情况下git pull rebase 相比会改变父commit

--rebase 可以让提交记录看起来很连续和优美,而不是多出很多无用的merge commit

命令6 : git reflog

骚操作 ,它能把所有的操作命令展示出来
图片来的更加直观,比如你用了git commit --amend 想要回到上次commit 咋整?
用这个命令,还能找到上次的commit id 再 reset 回去

git reflog

reflog 是 "reference log" 的缩写,查看的其实是引用的记录
默认不写查看的是HEAD的移动记录,也可以指定branch,如:master
可见查找出来的log是类似栈的结构


git reflog master

命令7:git stash 存储

在代码写了一部分后,而这时想要切换到另一个分支做其他事情
又不想因为过会儿回到这一点而做了一半的工作创建一次提交
这种场景下就可以使用git stash 命令

git stash的意思是暂存,可以把我们工作目录所有的未提交的修改都保存起来
在.git\logs\refs目录下有个stash文件,可以看到
如果我们多次暂存,可以用命令查看记录
git stash save "message" 可以带上message
git stash apply 可以应用最新的stash
git stash apply stash@{2}来应用指定的stash
git stash drop移除指定的stash
git stash pop应用后再删除
git stash list查看stash list

git stash list

命令8: git fsck --full

显示出所有没有被其他对象指向的对象,数据恢复的时候可能用到

Git HEAD ,master, branch解释

push的本质

merge的本质


Git常用命令

相关文章

  • GIt 操作补充

    常用的git操作命令 常用的git操作命令已经能够满足日常的工作需求 现补充一些高级命令 git branch -...

  • GIT中数据的存储与组织

    GIT中数据的存储与组织 我们经常使用一些Git的命令,例如checkout,commit等命令,这些都是高级命令...

  • Git高级命令

    命令 1:查看历史记录 git log 可以查看所有提交记录 命令 2:git commit --amend 适...

  • Git 高级命令

    Git push 通常对于一个本地新建的分枝,例如 git checkout -b develop ,在deve...

  • Git高级命令

    ① git rebase :在新位置重新提交,改变 commit 序列的基础点。把 merge 换成 rebas...

  • git 高级命令

    1.列出打tag的日期和tags gitfor-each-ref --sort=taggerdate --form...

  • Git高级命令

    git add -p以前我git add的时候,经常会把一些本地的用于调试的代码add进去(比如console.l...

  • Git高级命令

    Git sparse-checkout 检出指定目录或文件

  • git操作高级命令

    Git 是一款开源优秀的版本管理工具,它最初由 Linus Torvalds 等人开发,用于管理 Linux Ke...

  • Git的高级命令

    之前Git操作——简单使用 远程创建一个git项目,clone到本地,即为本地仓库(即一个含有.git隐藏文件夹的...

网友评论

      本文标题:Git高级命令

      本文链接:https://www.haomeiwen.com/subject/zigbbxtx.html