【问题标题】:Patch deployment - git doesn't fetch the latest remote commit补丁部署 - git 不获取最新的远程提交
【发布时间】:2015-11-09 02:28:29
【问题描述】:

我需要打补丁,但是:

  1. 补丁(要运行的 .sh 脚本)破坏了网站(有点)。
  2. 我修复了被补丁破坏的页面,并在 git 中提交了修改。
  3. 补丁修改了文件系统和数据库。
  4. 如果补丁检测到它的某些内容已被应用,则无法应用补丁,这意味着我不能执行git pull 然后为我的补丁执行脚本。我必须应用补丁,然后将我的修复应用到那个补丁。
  5. 应用补丁后我无法执行git pull(您对以下文件的本地更改将被合并覆盖)

通常我会:

  1. 应用补丁
  2. 做一个git -fetch
  3. 做一个git reset --hard

问题是git -fetch没有效果:

git log | head

git log origin | head

具有相同的输出,尽管原始存储库提前 4 次提交(当我执行 git status 时,git 知道这一点)。

我正在尝试做的事情(TL;DR):

我想从远程存储库中获取我的最后一次提交,以便在之后进行硬重置。

【问题讨论】:

    标签: git version-control merge patch git-merge


    【解决方案1】:

    我建议提供更多数据,并显示清晰的命令和错误消息。对于你的问题,人们只能给你一个概念性的答案,这对你来说可能不够,也可能不够。

    什么应该有效:

    1. 您可以使用git reset 返回到代码的合并前状态。
    2. 您可以使用git pull 重新尝试合并。
    3. 这非常重要:您应该让您的系统进入一种状态,在这种状态下,所有可合并的内容都已合并,即使它不起作用!因此,进行合并并解决合并冲突。全部。
    4. 观看以保存所有更改:git add .git commit -m blahgit push 命令。
    5. 修复需要修复的问题。
    6. 提交,再次推送。

    肯定没问题,尽管您将有一个中间状态,其中已经应用了合并,但代码不起作用。在我看来,这不是问题——至少在开发分支上不是。如果您需要在一个统一的提交中完成所有操作,您可以使用cherry-pick 和 rebase(首先我更喜欢 rebase,但其他人喜欢 rebase)。

    如果你也做了 rebase,它会让事情变得更成问题,尽管这是意见问题(我强烈反对 rebase,但其他人有不同的看法)。

    【讨论】:

    • 非常感谢您的回答,幸运的是我能够找到自己的错误,基本上只是没有指定正确的分支。
    【解决方案2】:

    我的错误其实很简单。显示日志的正确命令是:

    git log origin/branchname
    

    然后我确认git fetch 工作正常。

    然后我做了:

    git reset origin/branchname --hard 
    

    效果好多了。 当我想要最后一个远程提交时,一个简单的git reset 只会将代码设置为最后一个本地提交。

    【讨论】:

    • 您也可以(应该)通过单击左侧的管道图标来接受您自己的答案。这很重要 - 它向社区报告问题已经解决。在此旁边,您可以对您认为高质量的答案进行投票。
    • 谢谢,我需要等待一段时间才能接受我自己的回答。还剩几个小时:)
    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多