在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,从而允许不相关的历史记录?
请考虑以下情形:
我在自己的Git仓库中开发了一个小型实验项目A. 它现在已经成熟,我希望A成为更大的项目B的一部分,它有自己的大型存储库.我现在想添加A作为B的子目录.
如何将A合并到B中,而不会丢失任何一方的历史记录?
在git pull origin master我收到以下消息后:
warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:
git config pull.rebase false # merge (the default strategy)
git config pull.rebase true # rebase
git config pull.ff only # fast-forward only
You can replace "git config" with "git config --global" to set a default
preference for all repositories. You can also pass --rebase, --no-rebase,
or …Run Code Online (Sandbox Code Playgroud) 我试过了:
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\t/g'
Run Code Online (Sandbox Code Playgroud)
结果如下:
eggtsalad
Run Code Online (Sandbox Code Playgroud)
和...
echo -e "egg\t \t\t salad" | sed -E 's/[[:blank:]]+/\\t/g'
Run Code Online (Sandbox Code Playgroud)
结果如下:
egg\tsalad
Run Code Online (Sandbox Code Playgroud)
我想要的是什么:
egg salad
Run Code Online (Sandbox Code Playgroud) 我有两个子目录,每个子目录都有一个repo,因此:
PPP/
|--ABC/
| |--.git/
| |--AAA/
| | BBB/
| | CCC/
|
|--DEF/
| |--.git/
| |--DDD/
| |--EEE/
Run Code Online (Sandbox Code Playgroud)
并且想将它们组合成一个repo,所以,我认为目录结构将是这样的:
PPP/
|--.git/
|--ABC/
| |--AAA/
| |--BBB/
| |--CCC/
|
|--DEF/
| |--DDD/
| |--EEE/
Run Code Online (Sandbox Code Playgroud)
这是真的吗?
目前还有几个人在他们的机器上有回购.生活有多复杂?
助教.
Git可以使用git checkout --orphan命令在同一个repo中托管多个DAG .经常引用的用例git的这个特性是为文档或GitHub gh-pages孤立分支保留单独的分支以创建静态网站.
还有其他原因在git中使用孤立的分支吗?
我有两个git存储库,我想将它们合并在一起而不会丢失它们的提交历史记录.我试过这个:
cd firstRepo
git remote add other path/to/otherRepo
git fetch other
git checkout -b otherRepoBranch other/master
echo "`git rev-list otherRepoBranch | tail -n 1` `git rev-list master | head -n 1`" >> .git/info/grafts
git rebase otherRepoBranch master
Run Code Online (Sandbox Code Playgroud)
现在,当我查看提交历史记录时,一切看起来都不错,但我存储库中的唯一文件现在是来自otherRepo的文件.
有任何想法吗?
干杯,梅林
我们有3个独立的git存储库(每个都有一些分支),我们希望将它们合并为一个保存完整的历史记录和访问分支的能力,如下所示:
所以这就是我们所拥有的.3回购:
/A/.git
/B/.git
/C/.git
Run Code Online (Sandbox Code Playgroud)
我们想要一个包含3个子目录的超级仓库:
super/.git
super/A
super/B
super/C
Run Code Online (Sandbox Code Playgroud)
并说当切换到分支feature1(最初在repo B中,在repo C尚不存在的时候引入)我们期望结果是:
super/.git
super/A
super/B
Run Code Online (Sandbox Code Playgroud)
我们已经读过组合多个git存储库,但是使用git-stitch-repo时遇到了麻烦,它基本上只是宣传了super-repo中缺少大量的提交(没有任何可能指向问题的错误消息).
知道我们在这里做错了什么吗?
编辑 我们知道子模块和子树合并,但两者都不是一个选项.这应该是一次性操作.我们需要一次又一次加入repos.
编辑 可能是一个更简单的方法来提出基本相同的问题:说我们有一个回购与3个完全无关的分支.我们可以将它们合并而没有冲突到一个分支(因为它们不共享文件).现在,在查看历史时,我们会看到3个不相关的提交分支以及它们聚集在一起的一个点.但我们希望看到的是一个由所有3个分支的交错(按日期/时间)提交组成的分支.
我正在将几个Subversion存储库迁移到Git,但它们设置有点奇怪:标准的trunk/branches/tags结构存在于存储库的几个子目录中./ branches和/ tags都是空的,因此git-svn导入最终只有trunk目录.
svn/
proj1/
trunk/
src/
proj2/
trunk/
src/
Run Code Online (Sandbox Code Playgroud)
我想git filter-branch用来删除额外的trunk文件夹,但保持其余部分完整:
svn/
proj1/
src/
proj2/
src/
Run Code Online (Sandbox Code Playgroud)
git filter-branch --index-filter \
'git ls-files -s | sed "s-/trunk/-/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
Run Code Online (Sandbox Code Playgroud)
在我看来,它sed正在做它的工作,因为这个输入:
100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0 proj1/trunk/src/file1.txt
Run Code Online (Sandbox Code Playgroud)
生成此输出:
100644 fa3dcf79717e9aca85ad745078a2fb2a2ce2b900 0 proj1/src/file1.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我运行整个命令时,我收到以下错误:
Rewrite e00c119cfb755f741dc0e17c36d36bc2ddd27562 (1/42)mv: cannot stat `/c/dev/R
epo/.git-rewrite/t/../index.new': No such file or directory
index filter failed: git ls-files -s | sed "s-/trunk/-/-" | …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的git存储库中重写我的历史记录,因为我需要删除包含受限信息的文件.
这是发生的事情:
$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch FILE' master
Cannot rewrite branch(es) with a dirty working directory.
Run Code Online (Sandbox Code Playgroud)
所以我认为"这很奇怪,我很确定我没有未提交的更改",我运行:
$ git status -u
# On branch master
nothing to commit (use -u to show untracked files)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?有没有人知道会发生什么?此存储库中有子模块.
我有18个子模块(所有Vim插件),这是他们的状态.认为这可能是有用的信息.
$ for i in $(ls); do cd $i; git status -u; cd ..; done;
# Not currently on any branch.
nothing to commit (working directory clean)
# Not currently on any branch.
nothing to commit (working directory clean)
# …Run Code Online (Sandbox Code Playgroud) git ×9
merge ×2
command-line ×1
directory ×1
git-subtree ×1
macos ×1
rebase ×1
regex ×1
repository ×1
sed ×1
subdirectory ×1