我正在做一个我分叉的项目,我使用 gRPC 实现了分布式数据库。但是,我团队中的一名研究生重写了该系统的更简洁的工作版本。所以我只是将她的更改克隆并复制到我的本地目录并推送到我的仓库。然后,当我查看历史记录时,我发现它并没有显示她的提交历史记录。我想知道是否有办法将她的工作历史也包含在我的仓库中,因为她编写了代码并且我正在使用它。我确实在自述文件中给出了归属。
1 回答
是的,复制文件不会保留他们的 Git 历史记录。您只能获取文件的内容。
最简单的事情是让他们将她的更改合并到您从分叉和提取这些更改的存储库的主分支中。例如,如果你们都分叉了一个项目,他们应该发出拉取请求并获得批准。一旦她的工作进入您从(即“原点”)分叉的存储库中,就会正常更新您的分叉。这确保了工作得到审查、测试和批准。
如果这是不可能的,这就是你如何以去中心化的方式做到这一点。
首先,从她的存储库中获取她的更改。
作为“远程”链接到她的存储库。她的存储库必须可以通过 URL 访问,与您用来克隆它的 URL 相同。如果没有,您可以将其放在 USB 驱动器上并使用目录路径。我们需要给它起个名字,我叫它“grad”。
git remote add grad <url or directory to their repo>
然后获取他们的更改。这不会修改你的任何工作,它会获取它们的分支并在它们前面加上 grad/。他们的主人变成了研究生/硕士等等。
git fetch grad
假设她的分支是distributed_db,她的工作将在grad/distributed_db。在这一点上,你有他们的工作和历史。如果你不打算改变它,你就完了。您可以像任何其他分支一样引用 grad/distributed_db。
如果您确实想进行更改,请使用git branch distributed_db grad/distributed_db. Git 会创建一个本地分支distributed_db 并将其设置为track grad/distributed_db;git push并将git pull自动使用 grad/distributed_db 作为其远程分支。
您如何处理自己的更改取决于您自己。您可以尝试合并它们,但由于您在项目的同一部分独立工作,这可能会导致许多冲突。或者,如果您有一些特定的提交想要添加,您可以将它们取出并将它们放在她的工作之上git cherry-pick。
如果您想挑选一些小的更改,但没有进行小的、专注的提交来限制他们的更改……那么,现在您知道要进行小的、专注的提交来限制他们的更改。有一些工具可以帮助从大型提交中提取特定更改,但这是另一个问题。