Подтвердить что ты не робот

Удалить фиксацию на gitlab

Как я могу удалить фиксацию, которую я сделал на GitLab? Это совершение, которое я сделал, теперь не HEAD.

Если я не могу удалить его, могу ли я изменить?

Когда это был HEAD, я попробовал:

git reset  --soft HEAD

git reset  --soft HEAD^1

git revert HEAD

git rebase -i HEAD

git rebase -i HEAD~1

git reset --hard HEAD

git reset --hard Id-Code

Я уже пытался переустановить его, но он все еще остается на ветке. Теперь я просто удалил его из HEAD, но он все еще там.

Есть еще одна команда?

4b9b3361

Ответ 1

Предположим, у вас есть следующий сценарий:

* 1bd2200 (HEAD, master) another commit
* d258546 bad commit
* 0f1efa9 3rd commit
* bd8aa13 2nd commit
* 34c4f95 1st commit

Где вы хотите удалить d258546 i.e. "bad commit".

Попробуйте выполнить интерактивную перезагрузку, чтобы удалить ее: git rebase -i 34c4f95

тогда ваш редактор по умолчанию появится примерно так:

 pick bd8aa13 2nd commit
 pick 0f1efa9 3rd commit
 pick d258546 bad commit
 pick 1bd2200 another commit

 # Rebase 34c4f95..1bd2200 onto 34c4f95
 #
 # Commands:
 #  p, pick = use commit
 #  r, reword = use commit, but edit the commit message
 #  e, edit = use commit, but stop for amending
 #  s, squash = use commit, but meld into previous commit
 #  f, fixup = like "squash", but discard this commit log message
 #  x, exec = run command (the rest of the line) using shell
 #
 # These lines can be re-ordered; they are executed from top to bottom.
 #
 # If you remove a line here THAT COMMIT WILL BE LOST.
 #
 # However, if you remove everything, the rebase will be aborted.
 #
 # Note that empty commits are commented out

просто удалите строку с фиксацией, которую вы хотите удалить, и сохраните + выйдите из редактора:

 pick bd8aa13 2nd commit
 pick 0f1efa9 3rd commit
 pick 1bd2200 another commit
 ...

git продолжит удаление этой фиксации из вашей истории, оставив что-то вроде этого (помните хэш-изменение в потоке потомков от удаленной фиксации):

 * 34fa994 (HEAD, master) another commit
 * 0f1efa9 3rd commit
 * bd8aa13 2nd commit
 * 34c4f95 1st commit

Теперь, поскольку я полагаю, что вы уже нажали на плохой фиксатор на gitlab, вам нужно будет отменить свой график в репозитории (но с опцией -f, чтобы предотвратить его отклонение из-за небыстрого состояния, т.е. git push -f <your remote> <your branch>)

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

Альтернативный вариант:

Вместо того, чтобы переписывать историю, вы можете просто создать новый коммит, который отрицает изменения, внесенные вашей плохой фиксацией, для этого просто введите git revert <your bad commit hash>. Этот вариант, возможно, не такой чистый, но гораздо безопаснее (если вы не полностью осознаете, что вы делаете с интерактивной перестановкой).

Ответ 2

1.git reset --hard CommitId

2.git push -f мастер оригинала

1-я команда остановит вашу голову на commitid, а 2-я команда удалит все коммиты после этого идентификатора коммита в главной ветке

Примечание. Не забудьте добавить -f в push, иначе оно будет отклонено.

Ответ 3

У нас была похожая проблема, и этого было недостаточно, чтобы удалить только коммит и принудительно нажать на GitLab.
Он все еще был доступен в интерфейсе GitLab с помощью URL:

https://gitlab.example.com/<group>/<project>/commit/<commit hash>

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