github怎么提交回退旧版本代码并更改后的文件到主分支上。
- 提交后回退
- 想在git目录中屏蔽一些东西可以使用.gitignore文件
- 当git提示ssh-key too open 的时候,不能连接代码仓库的时候,只需要把.ssh里的文件权限改成700就行了,应该是文件在拷贝的时候权限变动了
提交后回退
如果提交一个版本,并且push到了github上,但是发现错了,想退回来。这个时候使用git reset 在修改之后在提交的时候会提示有,需要git pull来更新到最新的版本然后合并,但是问题是,这么做就没有办法改正了,因为就又回到了刚才错误的版本了。
这个时候有一个办法,这样解决:
假设只有你一个人拥有 master branch 的更改权限。
那么当执行 git reset --hard 之后,历史纪录是不能跟远程的记录直接合并的。因此才会有这个报错。
举个例子,远程是 A -> B -> C -> D,你 git reset --hard 之后是 A -> B。这时候除非远程那边抹掉 C 和 D,否则是不能合并的。
因此,这时候,你应该使用 git push origin master --force 来强行覆盖远程记录。
请不要根据提示使用 git pull。否则,你的本地又会变成 A -> B -> C -> D。因为 git pull 相当于 git fetch + git merge
这种方法的思路就是,把本地的旧版本的修改直接push到远端,强行把远端的文件覆盖。
还有一种方法是使用git revert:
G1 - G2 - G3 - B1 - B2 - B3
\ \ \ \-- HEAD
\ \ \------- HEAD~1
\ \------------ HEAD~2
\----------------- HEAD~3
一般命令是这样的:
git revert HEAD~x..HEAD
这里面,HEAD~x,就表示要回到的版本。其实他的意思的是,把从HEAD~x到HEAD的这几个更改返回去(不包含开始,包含结束)。注意,两个HEAD中间是两个英文句点。
想在git目录中屏蔽一些东西可以使用.gitignore文件
但是有的时候真的添加了这个文件,仍然不生效,这个时候就需要清空缓存然后重新添加,具体地:
git rm -r –cached .
之后在添加,提交,推送到github上面。