После разрешения конфликтов слияния я добавил файлы в промежуточную область. Затем я случайно выполнил команду фиксации с опцией исправления:
git commit --amend --no-edit
Я получил следующее сообщение:
fatal: You are in the middle of a merge -- cannot amend.
Означает ли это, что команда фиксации вообще не была выполнена? Могу ли я просто продолжить с правильной командой? :
git commit --no-edit
git log
и git reflog
показывают только успешный коммит слияния, так что все выглядит нормально. Означает ли это, что команды git, которые возвращают фатальную ошибку, могут вообще рассматриваться как невыполненные?
В сообщении об ошибке говорится, что он не может изменить текущий коммит, поэтому команда не была выполнена. Сообщение было отображено в результате проверки, которая происходит до начала фактической обработки. Выполняйте правильную команду без страха.
Вы можете попробовать git merge --continue
, а затем сделать коммит.
Соответствующая часть кода команды commit
выглядит и начинается так:
...
if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_commit_usage, builtin_commit_options);
status_init_config(&s, git_commit_config);
s.commit_template = 1;
status_format = STATUS_FORMAT_NONE; /* Ignore status.short */
s.colopts = 0;
if (get_oid("HEAD", &oid))
current_head = NULL;
else {
current_head = lookup_commit_or_die(&oid, "HEAD");
if (parse_commit(current_head))
die(_("could not parse HEAD commit"));
}
verbose = -1; /* unspecified */
argc = parse_and_validate_options(argc, argv, builtin_commit_options,
builtin_commit_usage,
prefix, current_head, &s);
if (verbose == -1)
verbose = (config_commit_verbose < 0) ? 0 : config_commit_verbose;
if (dry_run)
return dry_run_commit(argv, prefix, current_head, &s);
index_file = prepare_index(argv, prefix, current_head, 0);
/* Set up everything for writing the commit object. This includes
running hooks, writing the trees, and interacting with the user. */
if (!prepare_to_commit(index_file, prefix,
current_head, &s, &author_ident)) {
rollback_index_files();
return 1;
}
...
Перед строкой index_file = prepare_index(argv, prefix, current_head, 0)
код ничего не меняет, он проверяет аргументы командной строки и идентифицирует нужные объекты (текущий коммит).
Команда, которую вы запустили по ошибке, ничего не изменила в репозитории. Меры безопасности, реализованные в Git, не позволили ему нарушить вашу работу. Вы можете безопасно запустить правильную команду, чтобы завершить слияние.
Вы можете просто посмотреть историю коммитов и узнать. Либо с
git log
, либо лучше сtig
.