考虑以下情况(虽然这不是理想的,但仍然发生了):
建议的程序是什么?
我在想我应该在主线上的c1之前的提交中创建一个新的分支,比如pre-c1-branch。然后樱桃选择c1并将其应用于pre-c1-branch和git reset - 主线上的硬HEAD以从主线分支中删除c1提交。然后我可以将错误修复应用到主线分支并检查它。一旦签入,我将c1提交合并到主线。
理想情况下,我应该在功能分支而不是主线上开始使用c1的功能开发。但现在情况并非如此。
答案 0 :(得分:0)
git stash
git checkout HEAD^1
转到c1
之前的提交。git checkout -b hotfix
在另一个分支上进行重要更改。git checkout master
。git merge hotfix
在您的dev分支中获取您的修补程序并解决冲突(如果有)。git stash pop
开头没有提交。希望有帮助,我没有错过你的描述中的任何内容。
答案 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}
希望它变得清晰。