[编辑:以下更新的问题]
如果你注册了两个遥控器,你可以看到哪些提交被注册MAIN,哪些被注册在DERIV.
$ git clone gitserver:deriv.git
$ cd deriv
$ git remote add main gitserver:main.git
$ git fetch main
您应该在本地仓库中看到一个分支main/master,它会告诉您哪些提交是其中的一部分,MAIN哪些不是。
[/编辑]
简短的回答:
- 是的
- 不,但可能没关系
- 不,但可能没关系
- 是的
关于 git 日志:
我假设您DERIV通过运行来启动存储库git clone MAIN DERIV,并且您想要一个从中提取MAIN但从不推送的工作流程。
在这种情况下,DERIV存储库“知道” 的存在MAIN,并且 git 命令(主要git fetch)允许您将MAIN的历史记录集成到DERIV.
每次运行git fetch(后面git pull实际上是) 时,都会将的历史导入,它的当前分支将可见并带有前缀标记。git fetchgit mergeMAINDERIVorigin/
- 您可以运行
git branch -r以查看分支列表MAIN
- 您可以运行
git log origin/branchname以查看branchnameon的历史记录MAIN
- 如果你运行
git log --decorate,每个提交都会出现分支名称和指向它的标签
- 这些注释也将出现在图形工具中,例如
gitk
然后,您可以发现项目中的哪些分支DERIV集成了MAIN项目中的更改。
如果您在DERIV跟踪分支中有一些分支MAIN(这是 的默认行为master),git status如果DERIV' 的分支缺少来自MAIN' 的分支的提交,则会通知您。
如果你主要使用命令行,有两个命令非常方便:
git log --graph --decorate --pretty=oneline --abbrev-commit
git log --graph --decorate --pretty=oneline --abbrev-commit --all
您可以将它们作为快捷方式添加到您的配置文件中。
关于谁拉了,什么时候拉的
您将看到 的提交的日期和作者MAIN,您将在 的提交中看到合并的日期和作者DERIV,当与MAIN. 不过,您不会确切地看到是谁拉动了历史。
git fetch实际上是一个(几乎)无害的命令,它将 importMAIN的历史记录而不干扰DERIV分支(它会向您的存储库添加一堆提交,并移动所有origin/*导入的分支)。
拉取与樱桃采摘
跟踪分支头之间的差异(具有跟踪和合并分支git的所有内部机制)比尝试手动实现相同的结果(例如:使用and ,并尝试手动跟踪哪些提交已被移植以及哪些已被移植)更容易不是)。cherry-pickrebase
还有什么 ?
git fetch / git merge / git pull绝对是使两个存储库保持同步的方法。您需要的是一组分支规则。
也许您只对 ( , , ...) 的某些特定分支感兴趣,而对其他分支MAIN( master, , release...) 不感兴趣:您可以将存储库配置为默认仅导入某些选定的分支(此处有详细信息)。devtesttmpDERIV
让本地分支镜像远程分支很方便,但也许您不想DERIV:master被“硬链接”到MAIN:master.
如果要取消链接masterand origin/master,可以编辑.git/config文件并删除该部分[branch "master"]。
如果您想创建一个本地分支来跟踪具有不同名称的远程分支,您可以运行:
git branch main/v10 --track origin/v10
main/v10将是一个本地分支,它跟踪远程v10分支。
结论
没有指向The Book的 git 答案很少是完整的。花点时间阅读它,它的relevant explanation / line of text比例非常高。第 3 章是关于分支和合并的。