补丁部署 - git 不获取最新的远程提交
Patch deployment - git doesn't fetch the latest remote commit
我需要打补丁但是:
- 补丁(运行 的 .sh 脚本)破坏了网站(一点点)。
- 我修复了被补丁损坏的页面并在 git 中提交了修改。
- 补丁修改了文件系统和数据库。
- 如果检测到它的某些内容已经应用,则无法应用该补丁,这意味着我无法执行
git pull
然后执行我的补丁的脚本。我必须应用补丁,然后将我的修复应用到该补丁。
- 应用补丁后我无法执行
git pull
(您对以下文件的本地更改将被合并覆盖)
通常我会:
- 应用补丁
- 做一个
git -fetch
- 做一个
git reset --hard
问题是 git -fetch
没有效果:
git log | head
和
git log origin | head
具有相同的输出,尽管原始存储库提前 4 次提交(并且 git 知道当我执行 git status
时)。
我正在尝试做什么 (TL;DR):
我想从远程存储库中获取我最后的提交,以便我可以在之后进行硬重置。
我建议提供更多数据,并显示清晰的命令和错误信息。对于你的问题,人们只能给你一个概念性的答案,这对你来说可能不够。
什么应该有效:
- 您可以使用
git reset
. 返回到代码的合并前状态
- 您可以重试与
git pull
的合并。
- 这非常重要:您应该让您的系统进入一种状态,其中所有可合并的东西都已经合并,即使它不起作用!因此,进行合并并解决合并冲突。全部。
- 观看以保存每个更改:
git add .
、git commit -m blah
、git push
命令。
- 修复需要修复的内容。
- 提交,再次推送。
肯定没问题,尽管您将处于已应用合并的中间状态,但代码无法正常工作。在我看来,这不是问题——至少在开发分支上不是。如果你需要在一个统一的提交中完成所有事情,你可以使用 cherry-pick 和 rebase(首先我更喜欢,但其他人喜欢 rebase)。
如果你也做了 rebase,它会让事情变得更麻烦,虽然这是一个意见问题(我非常反对 rebase,但其他人有不同的意见)。
我的错误其实很简单。显示日志的正确命令是:
git log origin/branchname
然后我确认 git fetch
工作正常。
然后我做了:
git reset origin/branchname --hard
效果好多了。
当我想要最后一次远程提交时,一个简单的 git reset
只会将代码设置为最后一次本地提交。
我需要打补丁但是:
- 补丁(运行 的 .sh 脚本)破坏了网站(一点点)。
- 我修复了被补丁损坏的页面并在 git 中提交了修改。
- 补丁修改了文件系统和数据库。
- 如果检测到它的某些内容已经应用,则无法应用该补丁,这意味着我无法执行
git pull
然后执行我的补丁的脚本。我必须应用补丁,然后将我的修复应用到该补丁。 - 应用补丁后我无法执行
git pull
(您对以下文件的本地更改将被合并覆盖)
通常我会:
- 应用补丁
- 做一个
git -fetch
- 做一个
git reset --hard
问题是 git -fetch
没有效果:
git log | head
和
git log origin | head
具有相同的输出,尽管原始存储库提前 4 次提交(并且 git 知道当我执行 git status
时)。
我正在尝试做什么 (TL;DR):
我想从远程存储库中获取我最后的提交,以便我可以在之后进行硬重置。
我建议提供更多数据,并显示清晰的命令和错误信息。对于你的问题,人们只能给你一个概念性的答案,这对你来说可能不够。
什么应该有效:
- 您可以使用
git reset
. 返回到代码的合并前状态
- 您可以重试与
git pull
的合并。 - 这非常重要:您应该让您的系统进入一种状态,其中所有可合并的东西都已经合并,即使它不起作用!因此,进行合并并解决合并冲突。全部。
- 观看以保存每个更改:
git add .
、git commit -m blah
、git push
命令。 - 修复需要修复的内容。
- 提交,再次推送。
肯定没问题,尽管您将处于已应用合并的中间状态,但代码无法正常工作。在我看来,这不是问题——至少在开发分支上不是。如果你需要在一个统一的提交中完成所有事情,你可以使用 cherry-pick 和 rebase(首先我更喜欢,但其他人喜欢 rebase)。
如果你也做了 rebase,它会让事情变得更麻烦,虽然这是一个意见问题(我非常反对 rebase,但其他人有不同的意见)。
我的错误其实很简单。显示日志的正确命令是:
git log origin/branchname
然后我确认 git fetch
工作正常。
然后我做了:
git reset origin/branchname --hard
效果好多了。
当我想要最后一次远程提交时,一个简单的 git reset
只会将代码设置为最后一次本地提交。