Изменить: Обратите внимание, что ОП добавил ключевую информацию к вопросу; первая часть этого ответа предполагает что-то не так.
Каждый коммит имеет полный и полный снимок каждого файла (ну, каждый файл, который находится в этом коммите).
Это означает, что у вас есть ряд снимков:
...--F--G--H <-- somebranch, origin/somebranch
, где H
содержит снимок последний , содержащий некоторый набор файлов. Поскольку вы удалили файл, H
имеет на один меньше файлов, чем моментальный снимок G
.
Если вы сделаете новый снимок с файлом снова, вы получите:
...--F--G--H <-- origin/somebranch
\
I <-- somebranch
, где снимок в I
совпадает с снимком в H
, за исключением того, что файл, отсутствующий в H
, присутствует в I
. Когда вы git push
делаете этот коммит для другого Git, другой Git должен принять его и добавить к своим somebranch
, чтобы у вас теперь было:
...--F--G--H--I <-- somebranch, origin/somebranch
Commit H
продолжает существовать и ему по-прежнему не хватает файла. Пока это нормально, это нормально.
Вы не можете изменить совершить H
, вообще когда-либо, поэтому, если это не хорошо, у вас будет убедить другого Git в сбросить его копию commit H
. В общем случае, вы также можете отказаться от своего, сделав новый и улучшенный коммит H
, который заменит H
:
H <-- origin/somebranch
/
...--F--G--H' <-- somebranch
, где H'
делает есть файл. Затем вы используете Force-Pu sh вариант git push
, чтобы сообщить другим Git, что вы знаете, что этот запрос заставит их выбросить их коммит H
и заменить его новым и улучшил H'
, и да, вы хотите, чтобы они это делали.
Если кто-то еще сделал свой коммит, который зависит от существующего коммита H
, это не очень хорошо кому-то еще. Убедитесь, что никто не зависит от каких-либо коммитов, которые вы удалите таким образом. Если вы единственный, кто использует репозиторий other Git, это означает, что вам просто нужно согласиться с самим собой. Если другие люди также используют другое хранилище Git, сначала получите свое согласие.
(Если можно оставить H
на месте, это почти всегда проще и лучше.)
Re your edit: Эта информация очень важна . Это означает, что уже есть некоторые другие коммиты I
, J
, et c., Которые приходят после H
, в котором отсутствует файл. Принимает I
, J
, et c., Предположительно также пропускает файл. Если вы создаете новый и улучшенный заменитель H'
, вы также должны создать новый и улучшенный заменитель I'
, J'
, et c.