首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >git拉取恢复更改

git拉取恢复更改
EN

Stack Overflow用户
提问于 2019-06-06 07:44:36
回答 2查看 67关注 0票数 0

我在一个分支中提交并推动了对git的更改,但随后意识到其中一些更改是不正确的。我删除了不正确的部分,并试图修改原始的提交,因为这是我的组织的标准。但是,当我尝试推送到remote时,它会说:

提示:更新被拒绝,因为当前分支的提示在提示后面:它的远程副本。集成远程更改(例如,提示:'git pull ...')然后再推一把。提示:有关详细信息,请参阅“git push --help”中的“关于快速前进的说明”。

然后,当我使用git pull时,它会将我的更改恢复为原始提交的更改(删除的部分会重新出现)。我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-06 16:41:55

正如joran所提到的,您的上游与您修改后的本地已经失去了同步。如果你打算使用force,我建议你使用--force-with-lease,因为它只在上游没有人提交的情况下强制推送。

这节省了你改写同事工作的时间,因为它只会强制替换你的工作。

不过,总的来说,我认为最好再分支一次。

代码语言:javascript
复制
git checkout -b "my-feature-branch-fix"
git push -u origin my-feature-branch-fix

完成此操作并将其合并后,请返回并删除旧分支

git branch -D branch_name

这需要更长的时间,但更安全,因为你保留了两个副本,直到所有东西合并,并且你的git历史记录更准确地反映了实际发生的事情。

票数 0
EN

Stack Overflow用户

发布于 2019-06-06 09:57:26

当您修改推送的提交时,您通过用新的提交替换旧的提交来重写本地历史,也就是说,新的提交将具有与旧提交相同的父项。

之前:

代码语言:javascript
复制
x---x---P---O <--- master, origin/master

修正后:

代码语言:javascript
复制
x---x---P---A <--- master
         \
          +-O <--- origin/master

当把这个状态推到原点时,git检测到你的(本地)分支比远程repo晚一个提交,旧的提交,然后中止。

要重写远程存储库上的历史,您需要强制推送回源

代码语言:javascript
复制
git push --force origin

推送后--force:

代码语言:javascript
复制
x---x---P---A <--- master, origin/master

现在,您所要做的就是处理已经退出旧提交的队友。

这一部分可能不完整,但在某些情况下已经足够了。那些没有任何本地提交的用户可以获取并将其本地master分支重置为新的origin/master

代码语言:javascript
复制
git fetch
git checkout master
git reset --hard origin/master

任何有任何本地更改的人,基于旧的提交,都可以在获取和重置之前隐藏或提交到本地分支(可以从中挑选本地提交的临时分支)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56469376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档