git - git fetch / git merge сливается без конфликтов, но показывает, что почти все файлы изменены и должны быть зафиксированы - PullRequest
0 голосов
/ 07 ноября 2018

Я очень новичок в Git, и я видел это время от времени.

Например:

  1. Я работаю над своей веткой branch-A в течение нескольких дней (ветка создана из развернутой свежей копии)
  2. Я git add . / git commit -m "blahblah" готовлю и фиксирую свои изменения
  3. Теперь я хочу получить последние изменения с удаленного компьютера и объединить их с моей веткой, чтобы убедиться, что я работаю с последним кодом
  4. для этого я делаю git checkout develop, чтобы переключиться на локальную ветку develop, состояние git показывает, что я за 37 коммитами

    myMBPro:MyProj$ git status
    On branch develop
    Your branch is behind 'origin/develop' by 37 commits, and can be fast-forwarded.
      (use "git pull" to update your local branch)
    
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    

    и список удаленных, неотслеживаемых файлов следует

  5. git fetch origin, затем git merge origin/develop при включенном develop ветвь показывает:

myMBPro:MyProj user$ git fetch origin myMBPro:MyProj user$ git merge origin/develop Updating 799c6d7a..510c77ab Fast-forward .../Implementations/MyRenderer.cs | 39 ++-- ... etc

  1. Обычно я бы сейчас переключился на свою ветку branch-A и сделал бы git merge develop, чтобы объединить развернутый файл до branch-A, но обычно я сначала делаю git status, чтобы проверить, что все в порядке. Итак, я остаюсь на develop ветке и делаю git status
  2. Проблема в том, что я вижу git status, сообщающий, вероятно, о каждом отдельном файле в моем проекте, как об измененном (некоторые из них не отслежены, некоторые как промежуточные, а некоторые как готовые к фиксации).

`` `

myMBPro:MyProj user$ git status
On branch develop
Your branch is up to date with 'origin/develop'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

, и после этого следует список файлов, готовых к фиксации, файлов, которые не были подготовлены, и файлов, которые не были отслежены.

Итак, я получаю множество файлов, которые я даже не трогал, не изменял и не добавлял, показывая, что я как-то изменен. В результате я не решаюсь объединить их в моем branch-A.

Есть идеи, почему это происходит? Это даже нормально (но для меня это не звучит нормально, что файлы, которые я не изменил, появляются, поскольку они меняются, и теперь мне нужно начать отслеживать их, ставить и фиксировать их.

Я нахожусь на MacBookPro, использую git из терминала, а также использую SourceTree

1 Ответ

0 голосов
/ 08 ноября 2018

Вы уверены, что сделали git commit непосредственно перед git checkout develop? Единственный способ, которым я знаю, это может произойти, если ваш рабочий каталог грязный перед вами checkout develop и pull.

Конечно, могут быть проблемы с окончанием строки, но это все еще не объясняет проблему. Важным аспектом git merge является то, что он должен фиксироваться. Он гарантированно фиксируется, если нет конфликтов, и единственный способ, которым он не будет фиксироваться, - это если есть конфликты слияния (что может оставить вас в этом состоянии в разноуровневых и неустановленных файлах). Если у вас нет конфликтов слияния (то есть вы видите слова fast-forward), тогда, похоже, есть только одна возможность:

Скажем, вы работаете над веткой А. Затем вы делаете коммит. Затем вы изменяете пару файлов (или они автоматически изменяются некоторыми программами, которые вы используете одновременно). Затем, когда вы git checkout develop, вы в конечном итоге копируете свой index. index - это набор всех изменений, которые вы внесли с момента последней фиксации. Вы можете проверить другую ветку, и ваш индекс будет следовать за вами. Насколько мне известно, это единственное, что может вызвать то, что вы испытываете. Если объединение влияет на файлы, которые входят в ваш индекс, объединение завершится неудачно. Однако, слияние может быть успешным, если это простой fast-forward, который пропускает ваш index, что приведет к тому, что ваш index будет показан поверх самого последнего коммита.

В будущем попробуйте запустить git status до git fetch origin; git merge origin/develop. Если у вас все еще возникают проблемы, возможно, вам придется скопировать и вставить то, что находится в вашем терминале, чтобы мы могли прочитать его.

Кроме того, убедитесь, что в репозитории есть только исходный код и сценарии сборки, а также .gitignore любые файлы, которые могут быть созданы vim, вашей IDE, вашими сценариями сборки, исполняемым исполняемым файлом и т. Д. Любой из эти файлы, вероятно, будут постоянно меняться.

...