TortoiseGit - 版本回退
http://www.cnblogs.com/McKean/p/6083447.html
1、show log
2、点击左上角的master,选择远程的master分支
3、右击需要回退到的目标点,选择 Reset "master" to this ...
选择 Hard: Reset working tree and index (discard all local changes)
4、处理完后,可以看到master分支已经跟orgin/HEAD orgin/master不在一个点上了
git
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop恢复。 git reset --hard HASH #返回到某个节点,不保留修改。 git reset --hard HEAD~1 工作区、仓库区都回退到上一个版 git reset --hard HEAD^ 同 git reset --hard HEAD~1 git reset --soft HASH #返回到某个节点。保留修改,本地文件没有改变,需要 git checkout file再commit
git回到上一版本命令
git reset是指将当前head的内容重置,不会留log信息。
git reset HEAD filename 从暂存区中移除文件
git reset --hard HEAD~3 会将最新的3次提交全部重置,就像没有提交过一样。
git reset --hard commit (38679ed709fd0a3767b79b93d0fba5bb8dd235f8) 回退到 38679ed709fd0a3767b79b93d0fba5bb8dd235f8 版本
根据--soft --mixed --hard,会对working tree和index和HEAD进行重置:
git reset --mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
例如:我要彻底返回在上一次提交以前的版本。git reset --hrad HEAD~1
我要回到上一次提交的版本:
git reset --hard
回滚单个文件
1.进入到文件所在文件目录,或者能找到文件的路径
查看文件的修改记录
1 |
$ git log MainActivity.java |
结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
commit 7641210b242a95eed17827dd8159e76bdad6d619Author: ronanhardiman |
2.回退到指定的版本
1 |
$ git reset a4e215234aa4927c85693dca7b68e9976948a35e MainActivity.java |
结果
1 2 3 |
Unstaged changes after reset:M source/src/cn/eoe/app/ui/MainActivity.javasu@SUCHANGLI /e/eoeclient/android-app/source/src/cn/eoe/app/ui (master) |
3.提交到本地参考
1 |
$ git commit -m "revert old file because yjl commmit have a bug" |
结果
1 2 3 |
[master 874e01a] revert old file because yjl commmit have a bug 1 file changed, 26 insertions(+), 19 deletions(-)su@SUCHANGLI /e/eoeclient/android-app/source/src/cn/eoe/app/ui (master) |
4.更新到工作目录
1 |
$ git checkout MainActivity.java |
5.提交到远程仓库
1 |
$ git push origin master |
Your local changes to the following files would be overwritten by merge
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
参考http://blog.csdn.net/zwhfyy/article/details/8625228
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
untracked working tree file
参考:http://blog.csdn.net/sheismylife/article/details/7204345
编写脚本自动编译并部署时的注意
如果想在C2上编写脚本自动从S1上获取最新代码时,要注意:
1.首先之前产生的公钥不能设密码,否则每次git pull的时候都会要求输入密码。
2.不要将项目中的编译中间文件提交到S1上,比如CMake工程里面的build目录的文件,Maven工程里面的target目录里面的文件。否则下次在C2等客户端用git pull会报类似于这样的错误:
error: Untracked working tree file 'public/p_w_picpaths/icon.gif' would be overwritten by merge.
需要执行下面的命令才能修复:
git reset --hard HEAD
git clean -f -d
git pull
git 如何回滚远程仓库版本
关于远程仓库回滚
首先,必须要明白的一件事,任何普通用户不能擅自做有关远程仓库回退的操作,如果你擅自回滚了远程仓库,会对项目团队其他人造成不可预知的影响。如果需要回退版本,先联系项目的仓库管理员,在团队其他人都对自己本地未提交的工作做好备份之后,再进行远程仓库回退操作,操作结束后,团队成员需要重新同步远程仓库后继续自己的工作。
通常回滚远程仓库会有以下三种情形:
1、删除最后一次提交
这种情况是最简单的了,只需要以下两步就可以了
git revert HEAD git push origin master
注意,revert和reset的区别:
revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在,而reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。如果还没有理解的话,我们做如下测试:
假设我们有以下三次提交记录:
现在我们使用revert放弃最后一次提交,之后执行git log:
git revert HEAD git log
历史记录中还有第三次提交的记录,并且多了一次的提交,但是仓库内容已经回到了第二次提交之后的状态。 现在我们使用reset回到第三次提交,之后执行git log:
git reset --hard HEAD^ git log
历史记录中已经没有之前revert生成的提交记录了,现在应该明白了吧。 如果删除远程仓库的最后一次提交的时候不需要保留历史记录的话,可以使用reset,命令如下:
git reset --hard HEAD^ git push origin master -f 报remote: GitLab: You are not allowed to access master![K remote: error: hook declined to update refs/heads/master[K To http://myserver.com/root/push2jump.git ! [remote rejected] master -> master (hook declined) error: failed to push some refs to ' 解决方法: 登录gitlab,把分支的保护去掉,打开项目,点击 左上角的 Edit,弹出页上点击 Protected branches,再点击Unprotect,重新 git push -f
-f 参数是强制提交,因为reset之后本地库落后于远程库一个版本,因此需要强制提交。
2、删除历史某次提交
这种情况需要先用git log命令在历史记录中查找到想要删除的某次提交的commit id,比如下图中圈出来的就是注释为"2"的提交的commit id(由此可见提交的注释很重要,一定要认真写)
然后执行以下命令("commit id"替换为想要删除的提交的"commit id",需要注意最后的^号,意思是commit id的前一次提交):
git rebase -i "commit id"^
执行该条命令之后会打开一个编辑框,内容如下,列出了包含该次提交在内之后的所有提交。
然后在编辑框中删除你想要删除的提交所在行,然后保存退出就好啦,如果有冲突的需要解决冲突。接下来,执行以下命令,将本地仓库提交到远程库就完成了:
git push origin master -f
3、修改历史某次提交
这种情况的解决方法类似于第二种情况,只需要在第二条打开编辑框之后,将你想要修改的提交所在行的pick替换成edit然后保存退出,这个时候rebase会停在你要修改的提交,然后做你需要的修改,修改完毕之后,执行以下命令:
git add . git commit --amend git rebase --continue
如果你在之前的编辑框修改了n行,也就是说要对n次提交做修改,则需要重复执行以上步骤n次。
需要注意的是,在执行rebase命令对指定提交修改或删除之后,该次提交之后的所有提交的"commit id"都会改变。
Git pull 强制覆盖本地文件
git fetch --all
git reset --hard origin/master
git pull