我想在git方面获得更多的经验,所以我决定自己做一些试验。
我基本上想看看在移动/删除/编辑文件时合并和重新定位之间的不同行为。
所以我创建了如下文件结构:
âââ a
â âa.txt
â âaa.txt
âââ b
â âb.txt
â âbb.txt
âââ c
â âc.txt
â âcc.txt
每本书的内容
.txt
然后我做了三根树枝
MoveATXT
DeleteATXT
EditATXT
a.txt
住在/a的
因为搬家我搬家了
/a/a.txt
到
/b/a.txt
所有移动/删除都是通过git命令完成的
git rm
git mv
行为
git merge
是我所期待和理解的。
是的
git rebase
这让我很困惑。
当我做了一个新的分支
BranchOne
我决定先
git rebase MoveATXT
一切进展顺利,这一举动出现了。接下来我决定
git rebase DeleteATXT
这就是我觉得奇怪的地方。
它首先给了我一份打印出来的错误信息。这几乎是我所期望的。
First, rewinding head to replay your work on top of it...
Applying: Move a.txt to b/
Using index info to reconstruct a base tree...
A a/a.txt
Falling back to patching base and 3-way merge...
CONFLICT (rename/delete): a/a.txt deleted in HEAD and renamed to b/a.txt in Move a.txt to b/. Version Move a.txt to b/ of b/a.txt left in tree.
error: Failed to merge in the changes.
Patch failed at 0001 Move a.txt to b/
Use 'git am --show-current-patch' to see the failed patch
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
git status
$ git status
rebase in progress; onto 7a2c06d
You are currently rebasing branch 'test' on '7a2c06d'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: a/aa.txt -> b/aa.txt
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
added by them: b/a.txt
它告诉我
a/aa.txt
已经转移到
b/aa.txt
更进一步,当我
ls
它告诉我
a/
不见了
$ ls
b/ c/
b/
两者都有
a、 文本
`aa.txt文件
$ ls b/
a.txt aa.txt b.txt bb.txt
a/aa.txt文件
一个/