在git rebase origin/development以下错误消息从git显示:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Run Code Online (Sandbox Code Playgroud)
我的git版本是2.9.0.用于在以前的版本中正常工作.
如何通过新版本中引入的强制标记继续使用此rebase,从而允许不相关的历史记录?
我在一个名为XXX的文件夹中有一个Git存储库,我有第二个名为YYY的 Git存储库.
我想将XXX存储库作为名为ZZZ的子目录导入YYY存储库,并将所有XXX的更改历史记录添加到YYY.
文件夹结构之前:
??? XXX
? ??? .git
? ??? (project files)
??? YYY
??? .git
??? (project files)
Run Code Online (Sandbox Code Playgroud)
文件夹结构后:
YYY
??? .git <-- This now contains the change history from XXX
??? ZZZ <-- This was originally XXX
? ??? (project files)
??? (project files)
Run Code Online (Sandbox Code Playgroud)
可以这样做,还是我必须使用子模块?
我需要将两个Git存储库合并到一个全新的第三个存储库中.我已经找到了很多关于如何使用子树合并进行此操作的描述(例如JakubNarębski关于如何合并两个Git存储库的答案?)并遵循这些说明大多数工作,除了当我提交子树合并所有文件从旧存储库记录为新添加的文件.我可以在旧的存储库中看到提交历史记录git log,但如果我这样做git log <file>,则只显示该文件的一次提交 - 子树合并.从对上述答案的评论来看,我并不是唯一一个看到这个问题的人,但我发现没有公开的解决方案.
有没有办法合并存储库并保持个别文件历史记录完整?
假设我的设置看起来很像
phd/code/
phd/figures/
phd/thesis/
Run Code Online (Sandbox Code Playgroud)
由于历史原因,这些都有自己的git存储库.但我想将它们合并为一个,以简化一些事情.例如,现在我可能会进行两组更改,并且必须执行类似的操作
cd phd/code
git commit
cd ../figures
git commit
Run Code Online (Sandbox Code Playgroud)
表演(现在)很棒
cd phd
git commit
Run Code Online (Sandbox Code Playgroud)
似乎有几种方法可以使用子模块或从我的子存储库中提取,但这比我正在寻找的要复杂一些.至少,我很高兴
cd phd
git init
git add [[everything that's already in my other repositories]]
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个单行.有什么git可以帮助我吗?
我尝试通过运行以下命令从远程仓库中删除文件:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
Run Code Online (Sandbox Code Playgroud)
但是Git抱怨说
无法创建新备份.以前的备份已存在于refs/original/
Force中使用-f
rm 覆盖备份:无法删除/.git-rewrite/backup-refs:权限被拒绝
rm:无法删除目录/.git-rewrite:目录不为空
这是在我已经删除了Windows上的.git-rewrite目录之后.
我该如何删除该文件?这是一个29Mb的文件,坐在我的仓库,所以我非常需要删除该文件.
我试图删除提交git rebase -i,但显然因为提交触及了很多不同的文件,Git抱怨冲突,我流产是安全的.
我一直在为我的所有项目使用SVN.有时项目B起源于项目A的副本.当项目A具有一般更改时,我可以svn merge A在目录B中使用它并合并这些更改.
现在,如果我想使用git.我不喜欢将我的所有项目放在同一个存储库中,因为我必须克隆所有项目,而不能像SVN那样选择一个项目.但是每个项目都有一个存储库,我如何像以前使用SVN一样进行相同操作?
问题是: 如果我想要几个真正与一个原始项目相关的子项目并使它们保持同步,那么构建它的最佳方法是什么?而且我也希望能够单独检查它们
我正在尝试学习在Git 1.7.11中添加的新git-subtree命令.添加子树后,我似乎失去了变基的能力.我有一个带有README文件的主存储库和一个库存储库,它也有一个README文件.我将它添加到lib目录subtree add:
$ git subtree add -P lib/mylib myliborigin master
Run Code Online (Sandbox Code Playgroud)
这很好,但现在历史看起来像这样:
* 22c1fe6 (HEAD, master) Merge commit 'b6e698d9f4985825efa06dfdd7bba8d2930cd40e' as 'lib/mylib' -
|\
| * b6e698d Squashed 'lib/mylib/' content from commit d7dbd3d
* b99d55b Add readme
* 020e372 Initial
Run Code Online (Sandbox Code Playgroud)
现在当我想要反对我的repo origin/master并且它失败时因为squash commit直接应用于它不适用的父提交,因为它被应用于repo的根而不是我添加的时候给它的前缀子树.
如果我看一下壁球提交,原因很清楚.没有关于前缀的信息.这只是原始的mylib提交压扁在一起.只有下一个合并提交知道它的任何内容,但rebase不会在此处考虑它.
是否有任何变通方法(除了永远不会对子树提交进行重新定位)?
我有一个项目git.有一天,我将所有项目文件从当前目录移动到foo/bar/项目下.我是用它做的git mv.然后我添加了一些文件并对现有文件进行了一些更改.
因此,现在当我查看历史记录时foo/bar/file.c,我只能看到移动文件后所做的更改.
我尝试以各种方式解决这个问题(filter-branch使用子目录过滤器等),但没有任何帮助,所以我在这里很好.我很感激你能给我的任何帮助.谢谢!
我正在使用以下来源从我的存储库中删除一些大型文件和目录:
http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/
git filter-branch 似乎只能在当前分支上工作 - 是否有办法立即将其应用于所有分支?
git ×10
git-subtree ×2
git-commit ×1
git-merge ×1
git-rebase ×1
git-svn ×1
github ×1
history ×1
merge ×1
mv ×1
rebase ×1
wiki ×1