/********************************************************************************************************/
git reset
git reset --hard HEAD^
把工作区、暂存区和版本库都回到head的前一个版本
git reset HEAD^
工作区不变,把暂存区和版本库都回到head的前一个版本
git reset --soft HEAD^
工作区、暂存区不变,把版本库都回到head的前一个版本
git reset --hard HEAD
撤销暂存区的修改,即用版本库覆盖暂存区,工作目录不变
2.放弃本地修改,直接覆盖之
git reset --hard
git pull
git checkout master
git merge origin/master
# do your thing
git commit
git push origin master
/********************************************************************************************************/
1.stash
通常遇到这个问题,你可以直接commit你的修改;但我这次不想这样。
看看git stash是如何做的。
git stash
git pull
git stash pop
接下来diff一下此文件看看自动合并的情况,并作出相应修改。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
2.放弃本地修改,直接覆盖之
git reset --hard
git pull
/********************************************************************************************************/
git diff
working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
index file: 是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
commit: 是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。
总结一下:
git diff: 是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD: 是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
/********************************************************************************************************/
3.git reflog
git log
4.git push origin HEAD:ref/for/master
简单点说,就是refs/for/mybranch需要经过code review之后才可以提交;refs/heads/mybranch不需要code review
如果需要code review,直接push
$git push origin master
那么就会有“! [remote rejected] master -> master (prohibited by Gerrit)”的错误信息
而这样push就没有问题,
$git push origin HEAD:refs/for/mybranch
5.git stash
git reset
git reset --hard HEAD^
把工作区、暂存区和版本库都回到head的前一个版本
git reset HEAD^
工作区不变,把暂存区和版本库都回到head的前一个版本
git reset --soft HEAD^
工作区、暂存区不变,把版本库都回到head的前一个版本
git reset --hard HEAD
撤销暂存区的修改,即用版本库覆盖暂存区,工作目录不变
2.放弃本地修改,直接覆盖之
git reset --hard
git pull
git checkout master
git merge origin/master
# do your thing
git commit
git push origin master
/********************************************************************************************************/
1.stash
通常遇到这个问题,你可以直接commit你的修改;但我这次不想这样。
看看git stash是如何做的。
git stash
git pull
git stash pop
接下来diff一下此文件看看自动合并的情况,并作出相应修改。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
2.放弃本地修改,直接覆盖之
git reset --hard
git pull
/********************************************************************************************************/
git diff
working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
index file: 是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
commit: 是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。
总结一下:
git diff: 是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD: 是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
/********************************************************************************************************/
3.git reflog
git log
4.git push origin HEAD:ref/for/master
简单点说,就是refs/for/mybranch需要经过code review之后才可以提交;refs/heads/mybranch不需要code review
如果需要code review,直接push
$git push origin master
那么就会有“! [remote rejected] master -> master (prohibited by Gerrit)”的错误信息
而这样push就没有问题,
$git push origin HEAD:refs/for/mybranch
5.git stash