Git - 如何将修复应用于主线与其他挂起的更改

时间:2014-11-16 17:22:33

标签: git

考虑以下情况(虽然这不是理想的,但仍然发生了):

  1. 我本地主线分支上的最新提交是提交“c1”
  2. 由于待处理的CR等等,此提交尚未准备好签入。
  3. 同时,由于高优先级问题,我需要对主线进行另一次更改。我不能签入提交“c1”。
  4. 建议的程序是什么?

    我在想我应该在主线上的c1之前的提交中创建一个新的分支,比如pre-c1-branch。然后樱桃选择c1并将其应用于pre-c1-branch和git reset - 主线上的硬HEAD以从主线分支中删除c1提交。然后我可以将错误修复应用到主线分支并检查它。一旦签入,我将c1提交合并到主线。

    理想情况下,我应该在功能分支而不是主线上开始使用c1的功能开发。但现在情况并非如此。

3 个答案:

答案 0 :(得分:0)

  1. Stash如果您现在无法提交,那么您当前的工作。 git stash
  2. git checkout HEAD^1转到c1之前的提交。
  3. git checkout -b hotfix在另一个分支上进行重要更改。
  4. 提交更改并将其部署到您的客户或其他任何位置。
  5. 现在您可以返回上一个分支,例如掌握git checkout master
  6. git merge hotfix在您的dev分支中获取您的修补程序并解决冲突(如果有)。
  7. 最后一件事就是弹出你的藏品,你在git stash pop开头没有提交。
  8. 希望有帮助,我没有错过你的描述中的任何内容。

答案 1 :(得分:0)

你的计划对我来说听起来不错,尽管你根本不需要樱桃挑选。我们假设,您的历史记录如下:

* --- * --- * --- * (origin/master)
                   \
                    ---- * ---- c1 (master)

因此,您已向本地主分支提交了新内容,c1是最后一次提交。现在,您想要向远程主服务器添加提交。最简单的方法是检查提交并在那里提交一些内容:

git checkout origin/master
# work
git commit
git push origin HEAD:master

当检查一个远程分支时,Git会警告你,你正处于一个“独立的HEAD”并且如果你不推动它们,你会让你失败。所以更简洁的解决方案就是创建一个分支:

git checkout -b master-fix origin/master
# work
git commit
git push origin master-fix:master

除了您将获得一个单独的分支master-fix之外,这基本上是相同的。

当然,这也意味着您的本地主人和遥控器的主人仍然存在分歧。因此,可能更希望保持master引用远程主服务器,并将您的功能工作(c1)改为单独的分支。为此,您可以创建一个新分支,该分支将保留c1,然后将master重置为远程:

git branch my-feature # creates a new branch which is a copy of the current one (master)
git reset --hard origin/master # reset the master branch to the remote’s state
# work
git commit
git push origin master

这可能是最干净的解决方案。如果您已完成功能,则可以使用git merge my-feature将功能合并到主分支中。

答案 2 :(得分:0)

您可以存储当前的更改。使用命令

git stash save "message to identify the change"

之后,您可以转到其他分支并提交其他修复程序。  要恢复保存的更改,您可以使用命令

git stash list

获取reflog语法,例如藏匿@ {0}

然后应用它

喜欢

git stash apply stash@{0}

希望它变得清晰。