有极少数的Q&A的上的git grafts对replace.搜索[git] + grafts + replace只发现了两个与5. what-are-git-info-grafts-for和git-what-a-a-graftcommit-or-a-graft-id相关的两个.git.wiki.kernel.org:GraftPoint上还有一个注释
被移植现在完全取代由replace和filter-branch,或者他们仍然需要一些特殊的情况(和向后兼容)?
一般来说,它们如何不同(例如哪些在回购之间运输),它们通常是如何相同的?我已经看到Linus似乎并不关心目前在关于提交代数的讨论(最大父母回到任何根种类)的问题"移植已经不可靠了."
编辑:找到更多信息.
搜索www.kernel.org/pub/software/scm/git/docs graft仅找到3个结果:
稍微宽泛的搜索发现RelNotes/1.6.5.txt包含:
- refs/replace/hierarchy被设计为可用作"移植"机制的替代,其附加优势是它可以跨存储库传输.
不幸的是,gitrepository-layout(5)还没有更新refs/replace/repository布局信息(和注释),也没有任何信息/移植的弃用说明.
这更接近支持我的想法,但我欢迎任何确认或澄清.
我很难理解git-fetch的细微差别.我知道做一个fetch,将远程refs提取到本地跟踪分支.
我有几个问题:
是否有可能本地跟踪分支不存在?如果是,那么它会自动创建吗?
如果我执行fetch并指定非跟踪分支作为目标,会发生什么?
git-fetch的手册页指定:
git-fetch <options> <repository> <refspec>
Run Code Online (Sandbox Code Playgroud)我如何使用refspec从远程主站获取内容到其远程跟踪分支?我相信如果我现在的HEAD在主人身上并且我跑了,这可能是可能的
git fetch origin master
但是,我可以使用<+?src:dest>refspec来实现同样的目的吗?我认为这将有助于我更好地理解这些概念.
还有一个问题:
我的.git/config文件有以下行用于获取(仅显示相关行):
fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
有人可以解释这条线的确切含义吗?
我试图按照Git的说明:"目前不在任何分支上." 有没有一种简单的方法可以回到分支上,同时保持变化?但git checkout似乎被打破了:
$ git checkout origin/web-zach
HEAD is now at 1366cb1... Changed so css files not ignored
$ git status
# Not currently on any branch.
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# .cordova/config.xml
# www/languages/pt/sounds/
nothing added to commit but untracked files present (use "git add" to track)
Run Code Online (Sandbox Code Playgroud)
更具体地说,我担心"目前没有任何分支"的消息.git checkout在这里似乎没有做任何事情......这个命令的全部目的不是把我放在树枝上吗?我怎样才能回到分支并再次提交/推送?
我有两个不相关的(不共享任何祖先签入)Git存储库,一个是超级存储库,它包含许多较小的项目(让我们称之为存储库A).另一个只是一个小型项目的临时本地Git存储库(让我们称之为存储库B).从图形上看,它看起来像这样
A0-B0-C0-D0-E0-F0-G0-HEAD (repo A)
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A)
A1-B1-C1-D1-E1-HEAD (repo B)
Run Code Online (Sandbox Code Playgroud)
理想情况下,我真的想将回购B合并到一个历史时间轴的回购A. 所以看起来我最初是在repo A中开始投影.从图形上看,这将是理想的最终结果
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A)
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A)
Run Code Online (Sandbox Code Playgroud)
我一直在用子模块和子树进行一些阅读(顺便说一句,Pro Git是一本非常好的书),但它们似乎都能解决维护两个独立分支的问题,子模块能够从上游和子树略微拉动少头痛.这两种解决方案都需要额外的专用git命令来处理主检查和主树和模块分支之间的同步和同步.这两种解决方案也会产生多个时间轴(使用子树时,使用--squash时,您甚至可以获得3个单独的时间轴).
来自SO的最接近的解决方案似乎是在谈论" 移植 ",但真的是吗?我的目标是拥有一个统一的存储库,我可以在其中拉/推入签到,这样就没有更多的回购B,最后只需回购A.
我曾经git replace --graft记录过一个版本实际上是两个版本之间的(手动执行)合并:
git replace --graft <merged-version> <predecessor-version> <version-merged-from>
Run Code Online (Sandbox Code Playgroud)
这改变了我的(本地,私有)存储库.
我现在想通过将其"推送"到我们的共享存储库(在Github上,这样就可以)将该更改提供给我的团队的其他成员.我怎么做?简单git push似乎没有效果.
是的,我知道我应该从一开始就分配项目,但这就是我现在所处的情况.:)
我有一个本地Git存储库,包含我的博客,在我的本地计算机上,有几个月的提交历史记录.最初,我只是从存储库http://github.com/mojombo/mojombo.github.com下载文件 ,然后我继续使用我的本地Git存储库,第一次提交看起来像mojombo存储库中的最新文件.
我现在想分叉项目并让我的本地Git存储库提交在它上面重放,所以看起来我从头开始分叉项目,然后将它推回到我的GitHub上的mojombo存储库的分叉版本帐户:
http://github.com/program247365/mojombo.github.com
所以历史可能会像这样:
mobjombo repository: 1---2---3----23
\
my blog repository commits: 24---25---
Run Code Online (Sandbox Code Playgroud)
我可以使用哪些Git命令来完成此操作?
我看过这个问题.我是否必须将mojombo的存储库添加为我的项目的远程,然后将其拉入,合并,解决冲突,然后推送到我在GitHub上的分叉项目?
你能提供一个(全部或最常见的)操作或命令列表,这些操作或命令会危害git中的历史记录吗?
什么应该绝对避免?
git commit/ git push/ git commit --amend)我希望这个问题(如果它还没有在其他地方之前提出过)成为关于git上常见的可避免操作的某种参考.
此外,我使用git reset了很多,但我还没有完全意识到我可以对存储库(或其他贡献者副本)造成的损害.可能git reset有危险吗?
我们正试图远离TFS.使用git-tfs工具,我们能够迁移现有仓库的一部分,但在某些麻烦的签入时崩溃了.我们已经能够制作一套拼凑的Git repos,它涵盖了大多数原始TFS提交.
目前有:
期望:
我们有什么方法可以将它们拼接成一个Git仓库吗?我们不关心保留SHA(它们都是新的),但我们无法破坏文件历史记录.
我是唯一一个使用git的人,其他人都在使用svn.我用'git svn'连接到团队svn,大多数情况下都可以.最近,我最初是在我自己的单独的git repo上开始了一个项目,现在我需要将其中的东西合并到svn中.但是,我仍然希望在发行版之间不断调整我自己的隐私实现.
那么,从我的私人仓库到svn-cloned仓库挑选一些提交的最直接的方法是什么?要求是保留完整的本地历史记录,并且每个选择只有一个svn提交.或者是否需要进行一些挤压?
作为实现这一目标的方法,有没有办法让私有仓库作为svn克隆仓库的另一个来源?
这里有很多关于将文件夹从一个存储库移动到新存储库的帖子git filter-branch; 我需要做的是将单个文件移动到新的存储库中.
我已经创建了新的存储库,并将文件系统中的旧存储库添加为"远程",并创建了一个新的"根提交"(只需为新的单文件项目添加自述文件).现在我需要移植与此特定文件有关的提交到新的root-commit上.
(我应该提一下,这个文件在任何时候都没有像任何其他文件一样被修改;我怀疑这可能会使这个任务变得更容易.)
git ×10
github ×2
cherry-pick ×1
git-checkout ×1
git-fetch ×1
git-merge ×1
git-push ×1
git-svn ×1
git-tfs ×1
merge ×1
repository ×1
tfs ×1
workflow ×1