这是对 this question 的跟进关于创建分支。
令我感到奇怪的是,我仍然会在一个存储库上工作,因为我本地计算机上的文件将是不同实验的奇怪组合。
我认为最佳实践方法是复制存储库并在我计算机上的不同文件夹中为每个分支工作——但我不知道如何设置它。我的当前存储库位于 Documents/San/CompProj,那么我要使用什么命令来创建绑定(bind)到不同本地文件夹上的不同分支的新存储库?
Git 对我来说是相当新的,所以我希望您能对我在上面假设/提出的问题做出任何更正。
最佳答案
从 Git 2.5 开始,git-worktree
直接支持这个工作流程。参见 VonC's answer to this question了解详情。
如果您出于任何原因不喜欢 git-worktree
,我下面的回答可能就足够了。
Git 旨在允许您在磁盘上的单个文件夹中工作。这是一个包含您关心的所有分支的单一存储库。†您可以 checkout 您当时想要处理的任何分支。
在 Git 存储库中,您一次只能 check out 一个分支。如果您 checkout 第二个分支,磁盘上的文件将被删除并替换为第二个分支中的文件。
如果你有以下分支:
BRANCH-A BRANCH-B
alpha.txt alpha.txt
bravo.txt
charlie.txt charlie.txt
delta.txt
当您在 branch-A 上 checkout branch-B 时,bravo.txt
将被删除并且 delta.txt
将添加到您的工作目录。
但是,git-checkout
将不会覆盖您对文件所做的更改,除非您提供-f
参数。如果您对 alpha.txt
进行更改,然后尝试切换到 branch-B,您将收到一条消息,警告您您的更改将丢失并中止 checkout .
异常(exception)是未跟踪的文件。如果您 checkout 了 branch-A 并创建了一个名为 echo.txt
的新文件,那么当您 checkout branch-B时 Git 将不会触及该文件em>。这样,您可以决定要针对 branch-B 提交 echo.txt
,而不必经历 (1) 将文件移出存储库的麻烦, (2) checkout 正确的分支,并且 (3) 将文件移回 repo 协议(protocol)。
脚注
† 实际上,Git 并不强制您使用单一工作目录。如果您愿意,没有什么能阻止您在磁盘上为您要处理的每个分支创建不同的路径。
/home/me/project
+-- branch-a/
+-- branch-b/
+-- ...
这些路径中的每一个都是其自己的 Git 存储库(每个路径中都有一个 .git
文件夹),您可以在存储库之间推送和 pull 提交。
cd ~/project ## Go to my projects directory
git clone branch-a branch-b ## Create a new branch-b
cd branch-b
... work work work ...
git commit -a -m "Made some changes on branch-b"
git pull origin ## Fetch and merge the changes from branch-a
git push origin ## Push my changes back to branch-a
这就是一些人在不使用 named branches 的情况下使用 Mercurial 的方式: 他们将存储库克隆到磁盘上他们想要的每个分支的新目录中,然后在它们之间推送和 pull 变更集。
关于git - 如何同时在几个分支上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8470360/