git用的还是不熟练。
head/index/work directory
head是最新的commit
index是待提交的commit
work directory是写到磁盘的文件,还没add产生快照
git diff
比较的是pwd工作目录的文件状态和commit(默认为HEAD)中的状态不同点
git diff --no-index [--] path path
比较两个目录之间的不同,当给定两个目录的时候,自动切换到比较两个目录的内容。
git diff --cached
比较staged到index中内容和commit(默认head)的不同,
git diff commit -- path
当前目录中和指定commit间的区别
git diff commit1 commit2 -- path
显示指定两个commit之间的区别
git diff可以用于产生补丁,供打补丁。
git add commit操作后发现有的有的修改有问题,或者修改没完成,想退回,重新修改,add+commit提交一个更合理的操作怎么弄?
这属于退回操作,可以用git reset
git reset和git revert, git rebase,git restore有什么区别吗 git revert添加一个节点,好说。
git reset pre-commit-id会将index中内容变成前一个commit-id的快照,并将当前branch的commit退到前面,但working-directory中内容不变,属于默认的mixed模式。
git reset pre-commit-id --hard 除了上面的修改,还会将working directory中内容覆盖掉。
git reset commit-id --soft即只修改当前分支的头为指定的commit,
有个问题,提交的commit, 没有branch头在记录他,但他又是一个最前端,是不是就变成了一个无法再生长的野头?git有将他保留吗?实测下来确实是没删除,
只要你记住了这个commit-id,是能reset/checkout 过去到的。不删的好处是,pull远端的时候,就更快。
rebase和reset的区别就体现在上面,rebase会删掉之后的头。
git restore主要是用来从git的index恢复文件到工作目录,
git checkout和git restore有一定相似性,都可以修改当前的工作目录,但checkout主要是从不同commit来恢复,git restore只是从当前head来恢复,可以恢复index,也可以恢复工作目录。不修改head。
标签:reset,index,git,--,diff,commit,随笔 From: https://www.cnblogs.com/zwlwf/p/17459016.html