我有两个git存储库,它们之间有很多未跟踪的更改:
ftp --> C-- (untracked changes) --D
/ \
git A--B--C <-- old/master \
\
\
new/master --> D--E--F
Run Code Online (Sandbox Code Playgroud)
如何将旧存储库合并到新存储库中以获得线性历史记录
A--B--C--D--E--F
Run Code Online (Sandbox Code Playgroud)
编辑:
我弄完了:
git clone url://new new
cd new/
git remote add old url://old
git fetch old
git reset --hard origin/master
git filter-branch --parent-filter 'sed "s_^\$_-p old/master_"' HEAD
git push origin master
Run Code Online (Sandbox Code Playgroud)
唯一的问题是每个来自new/master的提交都加倍了(由于我认为父改变)所以我现在(M是合并提交)
D---E---F--
\
A--B--C--D'--E'--F'--M
Run Code Online (Sandbox Code Playgroud)
如何轻松删除不必要的提交(D-F和M)?
git filter-branch如果您的存储库如下所示:
D---E---F--
\
A--B--C--D'--E'--F'--M <-master
Run Code Online (Sandbox Code Playgroud)
并且您希望结果看起来像这样:
A--B--C--D'--E'--F' <-master
Run Code Online (Sandbox Code Playgroud)
那么您可以简单地强制master指向F':
git checkout master
git reset --hard <sha1-of-F'>
Run Code Online (Sandbox Code Playgroud)
这将导致提交D,E,F,和M成为无法访问,有效地删除它们(他们会经过一段时间收集的垃圾)。
假设您有两个如下所示的存储库:
A--B--C <-masterD--E--F <-master并且您希望结果为:
A--B--C--D'--E'--F' <- master然后您可以执行以下步骤:
初始化combined存储库:
git init combined
cd combined
git remote add old url:/to/old
git remote add new url:/to/new
git remote update
Run Code Online (Sandbox Code Playgroud)
此时,您的combined存储库如下所示:
A--B--C <-old/master
D--E--F <-new/master
Run Code Online (Sandbox Code Playgroud)
请注意,这两个分支没有任何连接。
将master分支设置为指向C:
git reset --hard old/master
Run Code Online (Sandbox Code Playgroud)
现在您的存储库如下所示:
old/master
|
v
A--B--C <-master
D--E--F <-new/master
Run Code Online (Sandbox Code Playgroud)找到以下的sha1 D:
d=$(git rev-list --reverse new/master | head -n 1)
Run Code Online (Sandbox Code Playgroud)D通过读取提交内容导入到您的工作目录和索引中
git read-tree -u --reset $d
Run Code Online (Sandbox Code Playgroud)提交的内容D使用与原始相同提交消息,作者,日期等D提交:
git commit -C $d
Run Code Online (Sandbox Code Playgroud)
现在您的存储库如下所示:
old/master
|
v
A--B--C--D' <-master
D--E--F <-new/master
Run Code Online (Sandbox Code Playgroud)挑选其余提交内容:
git cherry-pick $d..new/master
Run Code Online (Sandbox Code Playgroud)
现在您的存储库如下所示:
old/master
|
v
A--B--C--D'--E'--F' <-master
D--E--F <-new/master
Run Code Online (Sandbox Code Playgroud)清理:
git remote rm old
git remote rm new
Run Code Online (Sandbox Code Playgroud)
现在您的存储库如下所示:
A--B--C--D'--E'--F' <-master
Run Code Online (Sandbox Code Playgroud)小智 1
如果ftp不是合适的分支而只是复制粘贴作业,
这
对您有用
cd git
git rm -r .
cp -r ../ftp/. .
git add
git commit
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |