[编辑:以下更新的问题]
如果你注册了两个遥控器,你可以看到哪些提交被注册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 fetch
git merge
MAIN
DERIV
origin/
- 您可以运行
git branch -r
以查看分支列表MAIN
- 您可以运行
git log origin/branchname
以查看branchname
on的历史记录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-pick
rebase
还有什么 ?
git fetch / git merge / git pull
绝对是使两个存储库保持同步的方法。您需要的是一组分支规则。
也许您只对 ( , , ...) 的某些特定分支感兴趣,而对其他分支MAIN
( master
, , release
...) 不感兴趣:您可以将存储库配置为默认仅导入某些选定的分支(此处有详细信息)。dev
test
tmp
DERIV
让本地分支镜像远程分支很方便,但也许您不想DERIV:master
被“硬链接”到MAIN:master
.
如果要取消链接master
and 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 章是关于分支和合并的。