补丁部署 - git 不获取最新的远程提交

Patch deployment - git doesn't fetch the latest remote commit

我需要打补丁但是:

  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 知道当我执行 git status 时)。

我正在尝试做什么 (TL;DR):

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

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

什么应该有效:

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

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

如果你也做了 rebase,它会让事情变得更麻烦,虽然这是一个意见问题(我非常反对 rebase,但其他人有不同的意见)。

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

git log origin/branchname

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

然后我做了:

git reset origin/branchname --hard 

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