我使用的windows版,功能相对没那么强大,而我又比较菜鸟。
今天遇到local的修改没有commit就直接同步remote,结果local修改完毕commit后再publish,提示出错。原因是,存在remote的commit与local的commit的head不同,看了网上的答案,最后,我将remote的head建立一个分支,再合并到本地的head中,再提交,结果成功。
提示:合并前,一定要把本地的修改commit一次!
强制推送:
推荐使用rebase,若有pull/push冲突将会提示你对比代码再手动修改!
如果是本地的其它分支推送到master,则可以使用:
一次痛苦的折腾:
remote的master混乱,决定将其删除,再由本地上传一份合格的分支
今天遇到local的修改没有commit就直接同步remote,结果local修改完毕commit后再publish,提示出错。原因是,存在remote的commit与local的commit的head不同,看了网上的答案,最后,我将remote的head建立一个分支,再合并到本地的head中,再提交,结果成功。
提示:合并前,一定要把本地的修改commit一次!
强制推送:
或git push git@github.com:username/XXX.git +master
这个有大大的副作用,因为是强制推送。如果存在local与remote文件冲突,则local修改将强制覆盖remote修改。git push origin +master
推荐使用rebase,若有pull/push冲突将会提示你对比代码再手动修改!
如果是本地的其它分支推送到master,则可以使用:
注意,删除远程分支也是使用相同的命令,例如:如果:左边的分支为空,那么将删除:右边的远程的分支。$ git push origin test:master // 提交本地test分支作为远程的master分支
$ git push origin test:test // 提交本地test分支作为远程的test分支
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
一次痛苦的折腾:
remote的master混乱,决定将其删除,再由本地上传一份合格的分支
#从remote fetch指定分支内容,本地没有develop,fetch会帮忙建立
git fetch origin master:develop
#切换到develop新分支
git checkout develop
#硬删除下载后的最新一个commit
git reset --hard HEAD^
#向前推一个commit后,又提示本地还有没有commit的内容,因为这些更改没有用,因此不再记录这些修改
git checkout -- .
或git reset --hard
#!important 清理仓库,-fd,清理没有被git跟踪(没有特别指定add或配置文件指定不track)的文件和目录!小心使用!!!
git clean -f -d
#衍合temp,解决冲突(这里有一大串冲突内容)
git rebase develop temp
#指针快进
git checkout develop
git merge temp
#好了,现在develop是最新的分支,远程的master已经混乱了,我要把它删除掉,但在这之前先在remote 建立一个develop
git push origin -f develop:develop
#问题出现(其实之前的步骤多多少少出现了问题),可以连接到github,也可以解压和上传,消耗一大把时间过后,
#提示:the remote end hung up unexpectedly。在stachoverflow查询过后发觉是ssh的问题(因为我两部电脑共用一个帐号),
#经过一翻无效折腾,决定重新生成一个新的ssh key,参考https://github.com/settings/ssh页面,
#提示:powershell提示输入的密码是不会用*代替的,也不会有任何屏幕显示,尽管放心输入,它会记录你两次的输入是否相同
#再次push(最好使用先pull再push),这样的快进提交可以保证多人合作的提交不会覆盖,(相反,使用-f则为强制覆盖远程),
#HEAD指代本分支
git push origin -f HEAD:develop
#在github上将develop设了默认分支,然后删除master
git push origin :master
#将本地改好的master上传
git push origin -f master