报错代码
在 push 的时候,出现如下错误:
error: failed to push some refs to ‘ssh://git@git.umbrella.com:1024/test-power.git’
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push --help’ for details.
场景一(喧宾夺主):
当前本地要提交的代码是最新的,远程分支有的代码 - 本地代码也有,并且本地有新增的(意思就是本地代码为此次最新的提交那就可以直接把远程的此分支删掉,将本地推上去)
解决办法:
【注】um/fix-bug 是你本次要提交的分支,线上之前是提交一次的所以当然也是有的,只是一个远程一个本地的关系
【题外话】
1、查看远程是否有没有改远程分支:git branch -a (有-a是查看远程和本地的所有分支,没有-a就只看本地的分支)
2、如果发现远程并没有该分支,要么就是你压根就没提交过,其次就是你需要更新读取一下远程分支库 -> 指令:git pull 或者 git fetch
先使用(删除远程分支): `git push --delete origin um/fix-bug`
然后再(提交当前分支并关联远程库): `git push -u origin um/fix-bug`
此时就push成功啦~
上面的操作是默认本地为最新的代码,才删掉远程的,提交本地的(相当于将本地的覆盖线上的意思)
场景二(互利共赢):
如果你发现线上的代码是最新的,而本地的代码没有同步线上最新的代码导致上面的报错不给提交,此时本地代码中又写有其他部分的新代码(大概的意思就是,线上有部分新的代码本地没有,本地刚新增的代码线上也没有,因为也没有提交),这种情况就用下面的方法:
先执行(拉取远程分支代码插入当前提交前):`git pull --rebase origin um/fix-bug`
再执行(推上去):`git push origin um/fix-bug`
【注】执行上面指令时,确保是在本地的 um/fix-bug 上操作
下面我用图形象的解释下错误情况的发生和解决
git pull –rebase origin master 意为先取消 commit 记录,并且把它们临时 保存为补丁(patch)(这些补丁放到”.git/rebase”目录中),之后同步远程库到本地,最后合并补丁到本地库之中。
接下来就可以把本地库 push 到远程库当中了。
图文解析参考:https://blog.csdn.net/rocling/article/details/82956402
场景三(前功尽弃):
如果本地的代码的更改不想要了(确定本地的不要了哦~),想直接用线上的代码,一切重新来,让线上的代码直接覆盖本地的代码(直接用线上的,这样后面在此基础上改,再去 git push 是会成功的)
先执行(直接强制将线上覆盖本地代码):`git pull --force origin um/fix-bug:um/fix-bug`
...写BUG... `git add .` -> `git commit -m '新BUG'`
再提交(把最后的更改推上去): `git push origin um/fix-bug`
结
好了就这些了~
来源:https://blog.csdn.net/Umbrella_Um/article/details/109855178