6 ответов:
во-первых, если вы работаете с другими людьми в том же репозитории кода, Вы не должен удалить фиксацию, так как при принудительном обновлении репозитория он оставит локальные репозитории ваших коллег в незаконном состоянии (например, если они сделали коммиты после того, как вы удалили, эти коммиты будут недействительными, поскольку они были основаны на Теперь несуществующей фиксации).
сказал, что вы можете сделать это вернуться фиксация. Этот процедура выполняется по-разному (разные команды) в зависимости от CVS вы используете:
On git:
git revert <commit>On mercurial:
hg backout <REV>EDIT: Операция revert создает новую фиксацию, которая делает обратное, чем reverted commit (например, если исходная фиксация добавила строку, revert commit удаляет эту строку), эффективно удаляя изменения нежелательной фиксации без перезаписи репозитория история.
если вы не работа с другими (или Рады вызвать у них значительное раздражение), затем можно удалить коммиты из ветвей bitbucket.
если вы пытаетесь изменить ветвь не master:
git reset HEAD^ # remove the last commit from the branch history git push origin :branch_name # delete the branch from bitbucket git push origin branch_name # push the branch back up again, without the last commitесли вы пытаетесь изменить ветку master
в git вообще, главная ветвь не является особенной-это просто конвенция. Однако bitbucket и github и подобные сайты обычно требуют там должна быть основная ветвь (предположительно, потому что это проще, чем писать больше кода для обработки события, что репозиторий не имеет ветвей - не уверен). Поэтому вам нужно создать новую ветку и сделать ее основной веткой:
# on master: git checkout -b master_temp git reset HEAD^ # undo the bad commit on master_temp git push origin master_temp # push the new master to Bitbucketна Bitbucket перейдите в настройки репозитория и измените "главную ветвь" на
master_temp(на Github измените "ветку по умолчанию").git push origin :master # delete the original master branch from Bitbucket git checkout master git reset master_temp # reset master to master_temp (removing the bad commit) git push origin master # re-upload master to bitbucketТеперь перейдите в Bitbucket, и вы должны увидеть историю, которую вы хотите. Теперь вы можете перейти к настройкам страница и измените главную ветвь обратно на
master.этот процесс также будет работать с любыми другими изменениями истории (например,
git filter-branch). Вам просто нужно убедиться, что вы сбросили соответствующие коммиты, прежде чем новая история отделится от старой.edit: видимо, вам не нужно идти на все эти хлопоты на github, как вы можете force-push a reset branch.
работа с раздраженным коллаборационисты
в следующий раз, когда кто-нибудь попытается вытащить из вашего репозитория (если они уже вытащили плохой фиксатор), тяга не сработает. Они вручную должны будут сбросить фиксацию до изменения истории, а затем снова потянуть.
git reset HEAD^ git pullесли они вытащили плохой коммит,и совершил на нем, то они должны будут сбросить, а затем
git cherry-pickхорошие коммиты, которые они хотят создать, эффективно воссоздают всю ветвь без плохая фиксация.если они никогда не тянули плохой фиксации, то весь этот процесс не коснется их, и они могут тянуть, как обычно.
вы можете сбросить до
HEAD^затем с силой толкают его.git reset HEAD^ git push -u origin master --forceон удалит вашу последнюю фиксацию и отразится на bitbucket как удаленная фиксация, но все равно останется на их сервере.
у меня были проблемы с git revert в прошлом (в основном потому, что я не совсем уверен, как это работает.) У меня были проблемы с возвратом из-за проблем слияния..
мое простое решение этой.
Шаг 1.
git clone <your repos URL> .ваш проект в другой папке, то:
Шаг 2.
git reset --hard <the commit you wanna go to>затем Шаг 3.
в вашем последнем (и главном) проекте dir (тот, который имеет проблемную последнюю фиксацию) вставьте файлы шага 2
Шаг 4.
git commit -m "Fixing the previous messy commit"Шаг 5.
наслаждайтесь
после того, как изменения были зафиксированы он не сможет удалить. потому что природа совершить не удалить.
то, что вы можете сделать (простой и безопасный метод),
Интерактивные Перебазирования:
1)
git rebase -i HEAD~2#покажет ваши последние 2 коммита2) Ваш коммит будет список, как, последние появится в нижней части страницы LILO(последний в последний выход)
удалить последний коммит строка полностью
3) сохраните его как
ctrl+XилиESC:wqТеперь ваша ветка будет обновляться без вашего последнего коммита..
к настоящему времени cloud bitbucket (я не уверен, какая версия) позволяет вернуть фиксацию из файловой системы следующим образом (я не вижу, как вернуться из интерфейса Bitbucket в браузере Chrome).
-создайте резервную копию всего каталога, чтобы защитить изменения, которые вы непреднамеренно совершили
- выберите извлеченный каталог
-правая кнопка мыши: tortoise git menu
- repo-browser (опция меню 'revert' только отменяет uncommited изменения)
-нажмите головную кнопку
- выберите самую верхнюю строку (последняя фиксация)
- правая кнопка мыши: отменить изменение с помощью этой фиксации
-после того, как он развязал изменения в файловой системе, нажмите клавишу совершения
- Это обновление GIT с сообщением " Revert (ваше предыдущее сообщение). Это отменяет такой-то обязательства'
- выберите 'commit and push'.

Comments