我是Git的新手,所以随意像对待新手一样对待我.
我们的工作流程如此.我们有一个分支dev,我可以到达origin/dev.当我们进行更改时,我们会在dev中创建一个分支:
git checkout -b FixForBug origin/dev
现在我有一个叫做FixForBug跟踪的分支(我认为这是正确的词)origin/dev.因此,如果我这样做,git pull它将带来新的变化,origin/dev这是伟大的.现在,当我完成修复后,我将推送到一个名为同一个东西的远程分支.
首先,我从中origin/dev删除任何更改并执行rebase:
git pull --rebase
然后我将更改推送到同名的远程分支:
git push origin FixForBug
现在,远程服务器上有一个分支,我可以创建一个拉取请求,以便批准该变更并将其合并回dev分支.我永远不会对origin/dev自己施加任何东西.我猜这是非常常见的工作流程.
我第一次做git push,它工作正常,并创建远程分支.但是,如果我再次推送(假设在代码审查期间有人指出问题),我会收到以下错误:
错误:未能将某些引用推送到" https://github.limeade.info/Limeade/product.git "提示:更新被拒绝,因为当前分支的提示落后于提示:它的远程对应物.在再次推送之前集成远程更改(例如提示:'git pull ...').提示:有关详细信息,请参阅'git push --help'中的'关于快进的说明'.
但是,如果我这样做,git status它说我提前origin/dev1次提交(这是有意义的),如果我按照提示运行git pull,它说一切都是最新的.我想这是因为我正在推动一个与上游分支不同的分支.我可以通过运行来解决此问题:
git push -f origin FixForBug
在这种情况下,它会将更改推送到远程分支,说(强制更新),并且远程分支上的一切似乎都很好.
我的问题:
为什么-f在这种情况下需要?通常当你强迫某事时,这是因为你做错了事,或者至少违背了标准做法.我可以这样做,还是会弄乱远程分支中的某些东西,或者为最终将我的东西合并到dev中的人造成麻烦?
Tal*_*que 180
*"The tip of your current branch is behind its remote counterpart"*意味着远程分支上发生了您本地没有的更改。Git 会告诉您从中导入新更改REMOTE并将其与您的代码合并,然后再将push其发送到远程。
您可以使用此命令来强制更改具有本地存储库 () 的服务器。
git push -f origin master
Run Code Online (Sandbox Code Playgroud)
使用-f标签,您将使用您的代码覆盖远程分支代码。
Kei*_*ken 98
该-f 是实际需要,因为底垫.无论何时进行rebase,都需要进行强制推送,因为远程分支无法快速转发到您的提交.您总是希望确保在推送之前执行拉动,但如果您不想强制推送掌握或开发此类问题,您可以创建一个新分支以推送到然后合并或制作PR .
mha*_*tch 38
要确保您的本地分支FixForBug不在远程分支之前,FixForBug会在推送之前拉动并合并更改.
git pull origin FixForBug
git push origin FixForBug
Run Code Online (Sandbox Code Playgroud)
小智 24
设置当前分支名称,如master:
git pull --rebase origin mastergit push origin master
或分支名称开发
git pull --rebase origin developgit push origin develop
Gre*_*ill 11
如果你想避免使用-f,那么你可以使用
git pull
Run Code Online (Sandbox Code Playgroud)
代替
git pull --rebase
Run Code Online (Sandbox Code Playgroud)
非底垫将获取从变化origin/dev和合并他们进入你的FixForBug分支.然后,您将能够运行
git push origin FixForBug
Run Code Online (Sandbox Code Playgroud)
没有使用-f.
小智 10
我们可以使用以下 cmd 使用本地存储库强制更改 GitHub:
git push -f origin main
Run Code Online (Sandbox Code Playgroud)
当我遇到消息“更新被拒绝,因为当前分支的提示落后”时,我在 Azure DevOps 中使用的命令是/是以下命令:
git pull origin master
Run Code Online (Sandbox Code Playgroud)
(或者可以从一个新文件夹开始并进行克隆)...
这个答案没有解决提出的问题,具体来说,Keif 已经回答了这个,但它确实回答了问题的标题/标题文本,这将是 Azure DevOps 用户的常见问题。
我在 Keif 的回答中注意到评论:“你总是想确保在推动之前先拉动”!
除了 Git 命令行工具之外,我还使用了Git GUI工具。
(我不确定如何在 Git GUI 中执行相当于命令行命令“git pull origin master”的操作,所以我回到命令行来执行此操作)。
一个图表显示了您可能想要执行的各种操作的各种 Git 命令是这样的:
在我组织的 GitLab 中,没有任何东西对我有用。我最终使用了我的 featureBranch 中的以下命令
\n在功能分支中运行以下命令
\ngit pull origin featureBranch --rebase\nRun Code Online (Sandbox Code Playgroud)\n如果有任何冲突,解决冲突后:
\ngit rebase --continue\nEnter commit messages -> press ESC -> enter \xe2\x80\x9c:wq!\xe2\x80\x9d and enter\ngit push origin featureBranch\nRun Code Online (Sandbox Code Playgroud)\n
这件事刚刚发生在我身上。
解决方案:拉下我自己的分支,这样我就可以得到额外的提交。然后将其推回到我的远程分支。
在我的分支上,我确实做到了:
git pull
git push
Run Code Online (Sandbox Code Playgroud)
小智 7
就我而言,远程存储库已经有一个与我正在处理的开发分支同名的分支。我刚刚重命名了分支并推送了代码。这对我有用。
git checkout -b new-branch-name
git push origin new-branch-name
Run Code Online (Sandbox Code Playgroud)
这一定是因为提交是在您当前的推送之前。
git pull origin "name of branch you want to push"
git rebase
如果git rebase成功,那很好。否则,您已经在本地解决了所有合并冲突并保持它继续进行,直到与远程的 rebase 成功。
git rebase --continue
小智 5
这就是我解决问题的方法:
假设上游分支是您派生的分支,起源是您的存储库,并且您想要将 MR/PR 发送到上游分支。
比方说,你已经有了大约四次提交,并且你正在得到Updates were rejected because the tip of your current branch is behind.
这是我所做的
首先,压缩所有四个提交:
git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)
您将获得一个写有提交的列表pick(在编辑器中打开)。
pick fda59df commit 1
pick x536897 commit 2
pick c01a668 commit 3
pick c011a77 commit 4
Run Code Online (Sandbox Code Playgroud)
到
pick fda59df commit 1
squash x536897 commit 2
squash c01a668 commit 3
squash c011a77 commit 4
Run Code Online (Sandbox Code Playgroud)
之后,您可以保存合并的提交
您需要隐藏您的提交。
就是这样:
git reset --soft HEAD~1
git stash
Run Code Online (Sandbox Code Playgroud)
现在使用您的上游分支进行变基:
git fetch upstream beta && git rebase upstream/beta
Run Code Online (Sandbox Code Playgroud)
现在弹出你隐藏的提交:
git stash pop
Run Code Online (Sandbox Code Playgroud)
提交这些更改并推送它们:
git add -A
git commit -m "[foo] - foobar commit"
git push origin fix/#123 -f
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
160293 次 |
| 最近记录: |