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

时间:2015-11-09 02:28:30

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

我需要应用补丁但是:

  1. 补丁(运行的.sh脚本)打破了网站(一点点)。
  2. 我修复了补丁破坏的页面,并在git中提交了修改。
  3. 修补程序修改文件系统和数据库。
  4. 如果修补程序检测到某些内容已经应用,则无法应用该修补程序,这意味着我无法执行git pull,然后执行修补程序的脚本。我必须应用补丁,然后将我的修补程序应用于该补丁。
  5. 应用修补程序后,我无法执行git pull(对以下文件的本地更改将被合并覆盖)
  6. 通常我会:

    1. 应用补丁
    2. 执行git -fetch
    3. 执行git reset --hard
    4. 问题是git -fetch无效:

      git log | head
      

      git log origin | head
      

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

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

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

2 个答案:

答案 0 :(得分:1)

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

什么应该有效:

  1. 您可以使用git reset返回代码的合并前状态。
  2. 您可以使用git pull重新合并。
  3. 这一点非常重要:你应该让你的系统进入一个合并的东西已经合并的状态,即使它不起作用!因此,合并并解决合并冲突。所有这些。
  4. 注意保存所有更改:git add .git commit -m blahgit push命令。
  5. 修复需要修复的内容。
  6. 提交,再次推送。
  7. 一定会没问题,虽然你会有一个已经应用了合并的中间状态,但代码并没有工作。在我看来,这不是问题 - 至少,不是在开发分支上。如果你需要在一个统一的提交中做所有事情,你可以使用cherry-pick和rebase(首先我喜欢更好,但其他人喜欢rebase)。

    如果你确实做了改变,它可能会使事情变得更有问题,虽然这是意见问题(我非常反对rebase,但其他人有不同意见)。

答案 1 :(得分:1)

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

git log origin/branchname

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

然后我做了:

git reset origin/branchname --hard 

它工作得更好。 一个简单的git reset只会将代码设置为最后一次本地提交,当我想要最后一个远程提交时。