Does not have a commit checked out fatal ошибка при добавлении файлов

Обновлено: 04.07.2024

Я побежал git pull это закончилось конфликтом. Я разрешил конфликт, и теперь все в порядке (я также использовал mergetool).

когда я фиксирую разрешенный файл с git commit file.php -m "message" Я получаю ошибку:

у меня была такая же проблема раньше, и с помощью -a в commit работал отлично. Я думаю, что это не идеальный способ, потому что я не хочу фиксировать все изменения. Я хочу фиксировать файлы отдельно с отдельными комментариями. Как я могу это сделать? Почему git не позволяет пользователям фиксировать файлы отдельно после слияния? Я не мог найти удовлетворительного ответа на этот проблема.

Я обнаружил, что добавление "-i " в команду commit устраняет эту проблему для меня. -Я в основном говорит ему, чтобы разместить дополнительные файлы перед фиксацией. То есть:

это сработало для меня. Вы можете попробовать и это.

  1. этап только конфликтный файл ( git add your_file.txt )
  2. git commit -m "your_merge_message"

у вас, вероятно, есть конфликт в чем-то, что вы не устроили для фиксации. git не позволит вам совершать вещи независимо (потому что это все часть слияния, я думаю), поэтому вам нужно git add соответствующий файл, а затем git commit -m "Merge conflict resolution" . Элемент -i флаг git commit не добавлять для вас.

я получил это, когда я забыл -m в моем git commit при разрешении конфликта слияния git.

должно быть

ваше слияние остановилось в середине действия. Вы должны добавить свои файлы, а затем 'git commit':

git add file_1.php file_2.php file_3.php git commit

Ура

Если вы просто хотите выбросить весь сбор вишни и зафиксировать файлы в любых наборах, которые вы хотите,

доставит вас туда.

что делает soft reset, это перемещает указатель, указывающий на текущую головку, на фиксацию (ish), которую вы дали, но не изменяет файлы. Жесткий сброс переместит указатель, а также вернет все файлы в состояние в этом фиксаторе(ish). Это означает, что с помощью soft reset вы можете очистить состояние слияния, но сохранить изменения в фактических файлах, а затем зафиксировать или сбросить их каждый индивидуально по своему вкусу.

во время слияния Git хочет отслеживать родительские ветви по всевозможным причинам. То, что вы хотите сделать, это не слияние, как это видит git. Вы, вероятно, захотите сделать перебазирование или вишневый выбор вручную.

для себя это произошло в SourceTree, когда я попытался совершить слияние перед разрешением всех файлов. Затем я отметил, что последний файл разрешен, и все же он все еще дал мне эту ошибку при попытке совершить. Я закрыл SourceTree и снова открыл его, а затем он совершил штраф.

Если это Источник Дерева, мы должны явно пометить файл как разрешенный после разрешения конфликтов. Выберите файл это было просто решено никаких конфликтов. Тогда Действия - > Разрешить Конфликты - > Пометить Resolved. Если у вас есть несколько файлов, сделайте то же самое для всех. Соверши сейчас же.

Я побежал, git pull что закончилось конфликтом. Я решил конфликт, и теперь все в порядке (я также использовал mergetool).

У меня была та же проблема раньше, и использование -a в коммите работало отлично. Я думаю, что это не идеальный способ, потому что я не хочу совершать все изменения. Я хочу зафиксировать файлы отдельно с отдельными комментариями. Как я могу это сделать? Почему git не позволяет пользователям фиксировать файлы отдельно после слияния? Я не смог найти удовлетворительного ответа на эту проблему.

И вы знаете, поиск git execute "full commit" не дает почти ничего полезного. Ни одного соответствующего документа из справочных страниц Git. Это такой жалкий инструмент. @Torek - поговорим о другом беспорядке, созданном Git . Почему, черт возьми, трудно извлечь конфликтный файл из другой ветви, чтобы предотвратить конфликт, добавить его в эту ветку и затем зафиксировать его . А WTF это частичный коммит? Я не могу найти какую - либо документацию на него . Люди вынуждены попробовать следующие предположения . Как ты сделал это? У меня конфликт, и я ничего не могу сделать

Я обнаружил, что добавление "-i" к команде фиксации решает эту проблему для меня. -I в основном говорит, что нужно подготовить дополнительные файлы перед фиксацией. То есть:

@ jcalfee314 в git нужно подготовить файл для коммита. В этом конкретном случае перед фиксацией файл проходит через командную строку. Флаг -i используется в основном для того, когда вы завершаете слияние. Вы можете прочитать больше о флагах коммитов здесь . @ jcalfee314 Я проверил документацию и там написано: «Прежде чем делать коммитирование из поэтапного содержимого до настоящего момента, подготовьте также содержимое путей, указанных в командной строке. Обычно это не то, что вам нужно, если вы не завершаете конфликтующее слияние» . Я предполагаю, что при этом условии в зоне подготовки есть некоторая несогласованность, которая не может быть решена git add , что приводит к git commit неудаче. Добавление -i скажет git добавить и зафиксировать одновременно. Я до сих пор не уверен, почему, но это, кажется, имеет смысл.

Это сработало для меня. Вы можете попробовать это тоже.

Это добавляет все измененные файлы к коммиту , даже те, которые не установлены, что может быть нежелательно. Пользователи могут захотеть убрать флаг «а» Это именно то, что пользователь просит не делать, чтобы избежать фиксации всех файлов.

Вы можете использовать git commit -i для большинства случаев, но в случае, если это не работает

Тебе нужно сделать git commit -m "your_merge_message" . Во время конфликта слияния вы не можете объединить один файл, поэтому вам нужно

  1. Поместить только конфликтный файл ( git add your_file.txt )
  2. git commit -m "your_merge_message"

Возможно, вы столкнулись с конфликтом в чем-то, чего не сделали для фиксации. git не позволит вам фиксировать вещи независимо (потому что это все часть слияния, я думаю), поэтому вам нужен git add этот файл, а затем git commit -m "Merge conflict resolution" . -i Флаг git commit делает надстройку для вас.

Не в 1.9.0 - commit -i сработало, но нет git add; git commit

Я получил это, когда забыл -m в git commit при разрешении конфликта git merge.

Это должно работать.

Ваше слияние остановилось в середине действия. Вы должны добавить свои файлы, а затем «git commit»:

git add file_1.php file_2.php file_3.php git commit

Если вы просто хотите отбросить весь сбор вишни и зафиксировать файлы в любых наборах, которые вы хотите,

доставит вас туда.

То, что делает программный сброс, - это перемещает указатель, указывающий на текущий HEAD, на коммит (ish), который вы дали, но не изменяет файлы. Hard reset переместит указатель и вернет все файлы в состояние в этом коммите (ish). Это означает, что с помощью мягкого сброса вы можете очистить статус слияния, но сохранить изменения в реальных файлах, а затем зафиксировать или сбросить их по отдельности по своему вкусу.

Не могли бы вы объяснить это больше? Это, вероятно, то, что мне нужно, но я не слежу за тем, как это будет работать . Все ответы здесь просто «добавьте файлы, затем подтвердите!», Но это так тривиально очевидно; причина, по которой я здесь, в том, что я не хочу добавлять эти файлы перед тем, как зафиксировать. -_-;
  1. перейти в каталог вашего проекта
    1. показать скрытые файлы (появится папка .git)
    2. открыть папку .git
    3. удалить MERGE_HEAD
    4. совершить снова
    5. если git сказал вам, что git заблокирован, вернитесь в папку .git и удалите index.lock
    6. совершить снова все будет хорошо на этот раз.
    Большой! Это сработало бы для меня. Кстати, если на MacOS из терминала вы могли бы вызвать `open .git`, ведьма отобразит содержимое .git в Finder Это работает и для меня. Это должно быть принято как ответ.

    Для меня это произошло в SourceTree, когда я попытался выполнить слияние перед разрешением всех файлов. Затем я отметил, что последний файл разрешен, и все же он выдал мне эту ошибку при попытке зафиксировать. Я закрыл SourceTree и снова открыл его, а затем он совершил нормально.

    спасибо, но, к сожалению, это не сработало для меня. Досадно, но мне пришлось зафиксировать частное представление, а также слияние, прежде чем оно позволило мне совершить слияние.

    Я решил это с совершенно другим подходом, используя только Source Control Xcode.

    Справочная информация: Другая команда отправила изменения в удаленный репозиторий Git (через Beanstalk). С моей стороны, файлы .xcodeproj пришли в другой каталог, и изменения не были приняты. Позже, когда я попытался зафиксировать, я получил ошибку Tree Conflict в Xcode.

    Скриншот Дерево конфликта

    Посмотрите на все эти Моды и Добавленные файлы

    Однако при попытке выполнить коммит я получил ту же ошибку «роковая: невозможно выполнить частичную фиксацию во время слияния», обсуждаемую здесь.

    Вот как я решил эту проблему . (Теперь поймите, что я новичок, поэтому мне не хватает понимания . но мое невежество привело меня к поиску другого способа сделать это.) Сначала я клонировал своего хозяина. Филиал во вторичный филиал и переключился на этот филиал. Затем я создал рабочую копию и поместил каталог в эту рабочую копию за пределами исходного каталога проекта. (Я не знаю, было ли это необходимо, но это то, что я сделал, когда читал другие методы устранения неполадок.) Затем я переключил ветки на мастер, где я понял, что все мои Staged-файлы (изменения в Commit) пропали. Чтобы убедиться, что все файлы были обновлены до последних изменений, внесенных другой стороной, я создал новую ветвь с именем ThirdBranch, которая дублировала все файлы, Выдвинул его на Git-сервер и позволил Beanstalk сравнить мою версию главного сервера для сервера с веткой ThirdBrach, которую я только что нажал (строка за строкой), и все изменения другой стороны присутствовали в моем Xcode. Это означало, что мой главный репозиторий и главный репозиторий Git были одинаковыми, что подтверждает, что я решил проблему только с помощью Xcode.

    Не спрашивайте меня, как, помимо того, что я только что описал . и, конечно, заполнить пробелы, которые я пропустил. Я новичок в этом и не все понимаю. Может быть, опытный программист может отделить не относящуюся к делу информацию от релевантной и воссоздать эту технику более четко, отчасти поэтому я публикую это.

    Это повторяющийся ответ на дубликат вопроса по адресу: Неудачный Xcode Git Merge застрял

    Что бы я ни делал, git commit -am , git commit -a файл не будет добавлен в коммит. Любая помощь?

    Я думаю, что комментарии Джубобса верны. Является ли ваш «файл» подмодулем?

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

    Вот что я получаю из статуса git:

    Вы не увидите (зафиксировать или удалить неотслеживаемый или измененный контент в подмодулях) и (измененный контент) после моего README.txt

    Так что вам, возможно, придется делать то, что рекомендует git, работать с контентом в подмодулях.

    Редактировать: Раньше я думал, что "git add". мог решить проблему, но теперь я думаю, что не смог.

    Вы можете добавлять файлы тремя способами

    • Если вы хотите добавить один файл, используйте git add filenamewithpath
    • Если вы хотите добавить несколько файлов, используйте git add .

    за раз вы можете добавить все файлы и написать коммит с помощью этой команды

    git commit -a -m 'your commit message'

    У меня была такая же проблема. Мое личное "ага" было то, что я ранее добавил файл-репозиторий отслеживания .git в подпапку, и поэтому он рассматривался как подмодуль После удаления .git в подпапке, он счастливо присоединился к остальным моим папкам как часть только одного .git файла в корневой папке. Я даже не знал о подмодулях, так что, возможно, это кому-то тоже поможет.

    Не уверен, что это актуально или нет, но у меня возникла та же проблема при переключении между Linux и Windows. У меня было 2 файла, один WEB.config и другой web.config, так как Windows не чувствительна к регистру, она, похоже, запуталась. Я переименовал файл с именем commited, переименовал обратно и снова зафиксировал коммит, похоже, работает.

    была та же проблема, не знаю почему, но файл .h не зафиксировал.

    Итак, я переименовал его, он удалил оригинал и создал новый, насколько это было важно. Затем я совершил эти изменения. Git был счастлив.

    Тогда я просто переименовал его обратно. Опять мерзавец был счастлив совершить.

    Не могу объяснить, почему это произошло, но, по крайней мере, это было исправлено.

    Это случилось со мной только вчера, чувак, в моем случае причина была в том, что я пытался вызвать git из подкаталога моего проекта. Затем я использовал « git add --all », и это решило проблему, также я перешел в нужную папку выше, что также решило проблему.

    Но чего я не получил, так это: почему в любом случае команда git status и команда git --all работали из подкаталога? .-.

    Надеюсь, это поможет =)

    У меня была такая же ошибка:

    Затем с помощью git status :

    и git diff показали:

    Проблема заключалась в том, что я пытался добавить ветку, которая еще не существовала в хранилище подмодулей.

    Другой вариант: тот же самый файл находится в тайнике и конфликтует с текущей копией.

    Если это так, git stash drop - удалит тайник (с конфликтующим файлом) и позволит вам добавить измененный файл в индекс.

    Это сработало для меня. удаление всех файлов, которые были готовы для фиксации, включал (модифицированный контент) файл

    Сделайте резервную копию проблемных файлов. Удалите этот набор файлов, подтвердите удаление, нажмите один раз на источник.

    Добавьте обратно файлы из резервной копии и выполните новое добавление, принятие и отправку. Проблема будет решена.

    Я создал новый каталог "в/Home/mylogin/gitclone". Из этого каталога я сделал команду "git clone" против публичного РЕПО, и мне удалось создать последнюю копию.

    теперь я пытаюсь выяснить, как взять все файлы в моей рабочей папке (/var/www / myapp) и "проверить их" в главном репозитории.

    с в/Home/mylogin/gitclone, я попробовал следующую команду:

    можете ли вы дать мне несколько советов о том, что я делаю неправильно? Кроме того, я хотел бы добавить все, отличается ли это от мастера или нет. Спасибо.

    сначала в папке clone вы можете создать ветку (чтобы мастер оставался нетронутым)

    после того, как просто скопируйте файл, который вы хотите (в вашей старой папке) в папку клонирования.

    когда вы закончите, просто добавьте / зафиксируйте свое изменение и объединить вашу ветку в "мастер" филиал

    это будет выглядеть примерно так.

    вам придется переместить все файлы из /var/www /myapp в/home/mylogin / gitclone, а затем сделать git add . а то git commit -m "Your message" .

    это потому, что вы версионный материал внутри /home/mylogin/gitclone и git отслеживает все внутри эту папку. Вы не можете отслеживать другие папки за пределами этого репозитория.

    решением может быть создание подмодуля или использование символической ссылки с помощью ln -s

    при обновлении до git версии 2.12.2 эта ошибка появилась, я загрузил файл с полным путем, как:

    при удалении полного пути он начинает работать, например:

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

    то, что я описал выше, в значительной степени является основами git. Попробуйте прочитать это книги, который является довольно информативным.

    мой сценарий заключается в том, что путь репозитория git имеет символическую ссылку, и git выбрасывает эту ошибку, когда добавляет файл в "/home/abc/GIT_REPO/my_dir/my_file". и "/Home" - это на самом деле ссылку на "/devhome".

    ниндзя код дал мне немного света, когда я попытался отладить этот случай.

    поэтому я попытался получить целевой каталог, используя команду readlink -f /home/abc/GIT_REPO прежде чем выполнить команду "добавить".

    Читайте также: