在 git 中创建文件夹的副本来处理不同的功能并不常见,因为分支是如此轻量级,并且很容易在单个文件夹内切换分支。
尽管如此,如果项目很大、设置复杂,或者每个功能都需要大量外部配置来测试,那么在单独的文件夹中工作可能会更容易。
对于 git,每个文件夹都是一个单独的存储库,因此假设您有功能 X、Y 和 github 存储库 G 的文件夹,那么这意味着您实际上有 3 个独立的存储库:X、Y 和 G。
做你想做的事情的一种方法是首先根据需要准备功能 repo X,然后使用 git pull/push 将其与 G 同步。然后您准备功能存储库 Y 并将其与 G 同步。
最后你仍然会有 3 个独立的 repos,但每个都会有分支 feature-x、feature-y 和 master 具有相同的提交。
因此,如果您在文件夹 X 中从当前状态创建一个分支“feature-x”并切换到您将使用的分支:
git checkout -b feature-x
我想你已经提交了,git log 看起来不错。
然后你通过git push 与“G”同步。这会将分支 feature-x 和您的新提交添加到 G。
此时你实际上可以去 github 并创建一个可以通过 web 界面合并到 master 的 pull request。
如果您不想通过拉取请求 Web UI 执行此操作,那么您只需首先在本地文件夹 X 中准备您的主分支到您想要的状态,最简单的是:
git checkout master
git merge feature-x
然后你使用git push同步X和G的master分支。
最后对 Y 和其他特征重复相同的过程。
注意:在 feature repo Y 中要做的第一件事是从 github repo G 获取 master 分支的新状态,你可以通过 git pull 来做。
git checkout master
git pull
确保此时你的 Y 中的 master 没有改变,否则它将把 master 的 G 状态合并到 master 的 Y 状态之上。 git fetch 是 git pull 的替代品,不进行合并。
如果它被更改,要在不切换分支的情况下备份您的状态,请执行 git branch feature-y,并通过 git reset --hard origin/master 将 master 恢复到原始状态。那么git pull是安全的。