2. git commit --amend:
如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容(尽量把相似的功能或则同一个功能的代码段放在同一个提交中)
3.HEAD始终指向当前分支的最新提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
4.reset的详解:
reset命令有3种方式:
1:git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息(即只有工作区的代码不变)
2:git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可(工作区和暂存区不变)
3:git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容(工作区和暂存区和版本库全部改变)(慎用,可能就找不回来了)
下面列出几个reset的命令:
#回退所有内容到上一个版本
git reset HEAD^
#回退test这个文件的版本到上一个版本
git reset HEAD^ test
#向前回退到往上
3
个版本
git reset –soft HEAD~
3
#将本地的状态回退到和远程的一样
git reset –hard origin/master
#回退到某个版本
git reset 057d
#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
git revert HEAD
如果我们某次修改了某些内容,并且已经commit到本地仓库,而且已经push到远程仓库了
这种情况下,我们想把本地和远程仓库都回退到某个版本,该怎么做呢?
前面讲到的git reset只是在本地仓库中回退版本,而远程仓库的版本不会变化
这样,即时本地reset了,但如果再git pull,那么,远程仓库的内容又会和本地之前版本的内容进行merge
这并不是我们想要的东西,这时可以有2种办法来解决这个问题:
1:直接在远程server的仓库目录下,执行git reset –soft 10efa来回退。注意:在远程不能使用mixed或hard参数
2:在本地直接把远程的master分支给删除,然后再把reset后的分支内容给push上去。
git revert用于反转提交,执行revert命令时要求工作树必须是干净的.
git revert用一个新提交来消除一个历史提交所做的任何修改.
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)
6.git blame 文件名
可以很清楚的告诉你文件中的每一行是谁修改的和哪次提交做出的变更