版本的还原
git reset --hard d756f627fe568f4d8bcf1852ba60557eeab477a5(版本号)
如果远程服务器也需要还原到d756f627fe568f4d8bcf1852ba60557eeab477a5版本,则继续执行
git push -f
remote远程分支操作
git remote add rocket(远程分支名字,随意起) https://github.com/benjaminwhx/rocket.git(远程分支地址)
git remote -v(查看本地的远程分支信息)
我们可以用git pull rocket master获取远程分支master分支上的更新到本地。
git push rocket master推更新到远程分支
rebase和merge的区别
git merge应该大家都比较熟悉,就是把branch merge进来;
git rebase的意思其实也是蛮简单的,字面意思rebase就是把branch的根基替换一下,有点像嫁接。
网上一直流传的三张图,很经典。
before merge/rebase
1 |
A <- B <- C [master] |
after git merge master
1 |
A <- B <- C |
after git rebase master
1 |
A <- B <- C <- D' <- E' |
其实,这里rebase的线性,是指在当前branch上是线性的,其中带’ (撇号)的commit并没有被同步到master上,仍然在branch上。
下面的图更好一点:
1 |
D'--E' topic |
另外两个相关的命令是: git pull和 git pull –rebase。
这两个的区别在于前者是git fetch + git merge,后者是git fetch + git rebase。
什么时候使用merge,什么时候用rebase呢?
推荐一个地址: http://stackoverflow.com/questions/804115/when-do-you-use-git-rebase-instead-of-git-merge
里面有详细的解释:
1 |
Merge |
翻译一下:
1 |
Merge |
git修改已提交了的注释
当你不小心,写错了提交的注视/信息,该如何处理呢。理论上,SCM是不应该修改历史的信息的,提交的注释也是。不过在git中,其commit提供了一个–amend参数,可以修改最后一次提交的信息.但是如果你已经push过了,那么其历史最后一次,永远也不能修改了。
下面的命令只能对最后一次的提交进行修改:
$ git commit --amend
对于历史提交,得使用rebase了
$ git rebase -i HEAD~3
表示要修改当前版本的倒数第三次状态。
这个命令出来之后,会出来三行东东:
pick:*
pick:*
pick:*
如果你要修改哪个,就把那行的pick改成edit,然后退出。
这时通过git log你可以发现,git的最后一次提交已经变成你选的那个了,这时再使用:
$ git commit -amend
来对commit进行修改。
修改完了之后,要回来对不对?
使用下面的命令:
$ git rebase --continue
OK,一切都搞定了。