【发布时间】:2013-06-02 02:25:06
【问题描述】:
假设我们在 Git 中有以下情况:
-
已创建的存储库:
mkdir GitTest2 cd GitTest2 git init -
master 中的一些修改发生并被提交:
echo "On Master" > file git commit -a -m "Initial commit" -
Feature1 从 master 分支出来并完成了一些工作:
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1" -
同时,在主代码中发现了一个错误,并建立了一个修补程序分支:
git checkout master git branch hotfix1 git checkout hotfix1 -
该错误已在 hotfix 分支中修复并合并回 master(可能在拉取请求/代码审查之后):
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1 -
功能 1 的开发仍在继续:
git checkout feature1
假设我需要在我的功能分支中进行修补程序,可能是因为该错误也发生在那里。如何在不将提交复制到我的功能分支中的情况下实现这一点?
我想防止在我的功能分支上获得两个与功能实现无关的新提交。如果我使用拉取请求,这对我来说尤其重要:所有这些提交也将包含在拉取请求中并且必须进行审查,尽管这已经完成(因为修补程序已经在主服务器中)。
我不能做一个git merge master --ff-only:“致命:不能快进,中止。”,但我不确定这是否对我有帮助。
【问题讨论】:
-
如果分支
feature1完全是本地的,请查看git rebase。 -
谢谢,作为一个 git 初学者,
git rebase对我来说就像是黑魔法...... -
如果分支是 feature-只有错误修复不应该在那里发生(至少如果不是阻塞错误),因为这个分支的目的是显示一个新的特征。当与存在修复提交的主节点合并时,该错误将得到修复。
-
对于初学者来说可能值得注意的是,在 3.
git branch feature1和git checkout feature1可以合并为git checkout -b feature1和 4. 可以完全简化为git checkout -b hotfix1 master -
您愿意回来更改接受的答案吗,因为当前接受的答案很糟糕。
标签: git git-branch git-merge git-flow feature-branch