一位好心的同事将更改推送到 Master,而不是创建分支。这意味着当我尝试提交时,我得到了错误:
更新被拒绝,因为您当前分支的尖端落后
我知道这应该通过提出拉取请求来重新同步事物来解决,但我不想丢失我在本地所做的更改,我同样不想强制提交并清除其他人所做的更改.
什么是允许我合并更改而不会丢失的正确方法?
git stash
您的更改(如果未提交),与远程同步,使用 git stash pop
重新应用更改
如果您已经进行了一些提交,您可以执行以下操作
git pull --rebase
这会将您所有的本地提交置于新拉取的更改之上。
对此要非常小心:这可能会用文件覆盖您当前的所有文件,因为它们位于远程存储库中分支的头部!如果发生这种情况并且您不希望它发生,您可以使用 UNDO THIS CHANGE
git rebase --abort
......自然你必须在做任何新的提交之前这样做!
我会这样做:
暂存所有未暂存的更改。混帐添加。隐藏更改。 git stash save 与远程同步。 git pull -r 重新应用本地更改。 git stash pop 或 git stash apply
git pull -r
将意味着您相对于远程分支的头部所做的任何提交都将被彻底销毁!您的“存储”只会是相对于您上次本地提交的更改! OP 在评论中特别说“在尝试推送之前我已经做了几个本地提交”......
git pull -r
是个人喜好问题。我会在不会导致合并冲突或提交破坏的情况下使用它,正如@mike 提到的那样。否则,git pull
就足够了。在我看来,使用 git pull -r
的美妙之处在于它不会导致合并冲突,因为它不会创建额外的自动merge
提交,从而将我的本地提交放在首位(即更清晰的日志历史记录)我觉得“噪音”是可以避免的。
我在我的分支上遇到了完全相同的问题(我们称之为分支 B),我按照三个简单的步骤让它工作
切换到主分支 (git checkout master) 拉动主分支 (git pull) 创建新分支 (git 分支 C) - 请注意,我们现在从主分支分支现在当您在分支 C 上时,与分支 B 合并(git merge B) 现在做一个推送 (git push origin C) - 工作:)
现在您可以删除分支 B,然后将分支 C 重命名为分支 B。
希望这可以帮助。
这对我有用:
git pull origin $(git branch --show-current)
git push
fyi git branch --show-current
返回当前分支的名称。
我有同样的问题。不幸的是,我的目录级别错误。
我试图:git push -u origin master
->有一个错误
然后我尝试了:git pull --rebase
->还有一个问题
最后我更改目录cd your_directory
然后我又试了一次(git push
),它成功了!
当有人将代码提交到开发/主控并且最新代码尚未从开发/主控重新定位并且您尝试覆盖对开发/主控分支的新更改时,会出现此问题
解决方案:
如果您正在处理功能分支并通过执行 git checkout develop/master 切换到 master/develop 分支,请进行备份
做 git pull
当您在同一个文件中进行更改时,您将获得更改并发生合并冲突,而该文件尚未从开发/主文件重新定位
如果发生冲突,请解决冲突并执行 git push,这应该可以
通过以下 Visual Studio 2017 更改,我能够克服此问题:
在团队资源管理器中,转到设置。转到全局设置以在全局级别配置此选项;转到存储库设置以在存储库级别配置此选项。拉到所需设置时设置 Rebase 本地分支(对我来说是 True),然后选择更新保存。
我用过
git push origin master
更新拒绝后,我查看了一个历史记录:
git log --oneline --all
我的 HEAD -> master 高于 origin/master。
但是我使用了强制,这就足够了:
git push --force-with-lease origin master
头颅又聚在一起了……
您当前不在分支上。要将历史推送到当前(分离的 HEAD)状态,请使用
git push origin HEAD:<name-of-remote-branch>
我遇到过同样的问题。
修复:git pull origin {branch-name}
全部排序。
参考:There is no tracking information for the current branch
这对我有用,我会推荐给你。如果您在已提交的本地分支上,请尝试使用此 git 命令重命名分支
git branch -m <new_name>
然后再次推动
git push --set-upstream origin <new_name>
我遇到了这个问题,我意识到 .gitignore 文件已更改。所以,我改变了 .gitignore 并且我可以拉动这些改变。
git pull --rebase <remote> <branch>
,然后修复合并冲突。然后是git add
,最后是git rebase --continue
。您的本地和远程分支可能有问题需要修复。