Git движущихся файлов я никогда не перемещал - PullRequest
0 голосов
/ 27 ноября 2018

Я хотел получить больше опыта в 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.txt `aa.txt

$ ls b/
a.txt  aa.txt  b.txt  bb.txt

Почему это происходит?Я никогда не двигался a/aa.txt Почему Git перемещает это для меня?Почему каталог a/ был удален?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...