git rebase, «Будет перезаписан» и «Без изменений - вы забыли использовать 'git add'?»

git rebase не работает должным образом в некоторых случаях, когда файл добавляется в репозиторий, затем удаляется из репозитория, а затем добавляется в рабочий каталог (но не репозиторий).

Вот более конкретное описание моей проблемы:

  • если ветка создается и переключается на затем добавляется в рабочий каталог (но не в репозиторий). ...

    git rebase не работает должным образом в некоторых случаях, когда файл добавляется в репозиторий, затем удаляется из репозитория, а затем добавляется в рабочий каталог (но не репозиторий).

    Вот более конкретное описание моей проблемы:

    • если ветка создается и переключается на затем добавляется в рабочий каталог (но не в репозиторий). ...

      git rebase не работает должным образом в некоторых случаях, когда файл добавляется в репозиторий, затем удаляется из репозитория, а затем добавляется в рабочий каталог (но не репозиторий).

      Вот более конкретное описание моей проблемы:

      • если ветка создается и переключается на ствол,

      • и файл X добавляется и фиксируется в ветви,

      • , а затем X удаляется и совершено в ветке,

      • и X снова создается в рабочем каталог, но не добавлен или зафиксировано,

      • и магистральная ветвь продвигается,

      • затем

      • выполняется перебазирование с использованием расширенных ствол в качестве базы выйдет из строя, потому что он откажется перезаписать X,

      • и перебазирование не может быть продолжено даже если рабочий каталог X удален или перемещен в сторону.

      Вот сценарий для воспроизведения моей проблемы в командной строке:

      git init
      echo foo > foo.txt
      git add .
      git commit -m 'foo'
      echo foo >> foo.txt
      git add .
      git commit -m 'foo foo'
      git checkout -b topic HEAD^
      git log
      echo bar > bar.txt
      echo baz > baz.txt
      git add .
      git commit -m 'bar baz'
      git rm bar.txt
      git commit -m '-bar' 
      echo bar > bar.txt
      git rebase master 
      # the following output is emitted:
      # First, rewinding head to replay your work on top of it...
      # Applying: bar baz
      # Using index info to reconstruct a base tree...
      # Falling back to patching base and 3-way merge...
      # error: Untracked working tree file 'bar.txt' would be overwritten by merge.  Aborting
      # Failed to merge in the changes.
      # Patch failed at 0001 bar baz
      # 
      # When you have resolved this problem run "git rebase --continue".
      rm bar.txt
      git rebase --continue
      # the following output is emitted:
      # Applying: bar baz
      # No changes - did you forget to use 'git add'?
      # 
      # When you have resolved this problem run "git rebase --continue".
      # If you would prefer to skip this patch, instead run "git rebase --skip".
      # To restore the original branch and stop rebasing run "git rebase --abort".
      

      Я знаю, что могу прервать перебазирование с помощью git rebase --abort , remove bar.txt , а затем снова git rebase master . Но как я могу продолжить перебазирование, не прерывая его сначала?

9
задан Russell Silva 15 September 2010 в 19:02
поделиться