在 master 中,我创建了一个分支 A,因为我想添加一个新功能。完成该功能后,我承诺了到目前为止的所有内容。但后来我继续在分支上工作,现在意识到我所做的所有事情,因为该提交在新分支中更合乎逻辑,称之为 B,脱离 master。
现在,我显然可以将我的更改提交到 A,将其拉入 master,然后分支 master,将其称为 B,然后继续。但是,如果我真的想保持干净并且宁愿将我的最后一次提交从 A 拉到 master 中,然后创建一个分支 B,然后拉入我现在在 A 中未提交的更改,该怎么办?
在 master 中,我创建了一个分支 A,因为我想添加一个新功能。完成该功能后,我承诺了到目前为止的所有内容。但后来我继续在分支上工作,现在意识到我所做的所有事情,因为该提交在新分支中更合乎逻辑,称之为 B,脱离 master。
现在,我显然可以将我的更改提交到 A,将其拉入 master,然后分支 master,将其称为 B,然后继续。但是,如果我真的想保持干净并且宁愿将我的最后一次提交从 A 拉到 master 中,然后创建一个分支 B,然后拉入我现在在 A 中未提交的更改,该怎么办?
从您在分支 A 中的内容开始:
git stash # save your changes away
git checkout master # check out the master branch
git merge A # merge your changes from branch A
git pull --rebase # This is to get rid of the 'Merged branch A' log entry
git checkout -b B # create and checkout branch B from current master
git stash pop # get back the changes you saved
您将在新创建的分支 B 中进行未提交的更改。
您可以从任意起点合并和创建分支,而不仅仅是某个分支的 HEAD。
查看文档中<start-point>
与.git branch
至于在您实际开始处理 B 时将 A 合并到 master 中,该git merge
命令接受任何提交作为参数(同样,不仅仅是分支的 HEAD)。回到这个分支的日志,找到在 A 上的工作完成并开始在特性 B 上工作的点的提交 ID,checkout master,然后与这个 ID 合并。