Відповіді:
По-перше, якщо ви працюєте з іншими людьми в одному сховищі коду, ви не повинні видаляти комісію, оскільки, коли ви примусите оновлення до сховища, воно залишить локальні сховища ваших колег у незаконному стані (наприклад, якщо вони зробив зобов’язання після того, як ви видалили, ці зобов’язання будуть недійсними, оскільки вони базувались на вже неіснуючій комісії).
Сказав, що те, що ти можеш зробити, це повернути комісію. Ця процедура виконується по-різному (різні команди), залежно від CVS, який ви використовуєте:
На git :
git revert <commit>
Про похожі :
hg backout <REV>
EDIT: Операція відновлення створює нову команду, яка робить протилежну, ніж повернену комісію (наприклад, якщо в оригінальний фіксатор додано рядок, команда відновлення видаляє цей рядок), ефективно видаляючи зміни небажаного комітету, не переписуючи історію сховища.
git backout <REV>
? Або hg backout <REV>
:?
Якщо ви не працюєте з іншими (або раді викликати у них значну роздратування) , можна видалити коміти з гілок бітбукета.
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
В git взагалі, головна галузь не особлива - це просто умовність. Однак бітбукет і 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
). Вам потрібно лише переконатися, що потрібно скинути відповідні коміти, перш ніж нова історія відірветься від старої.
редагувати : мабуть, вам не потрібно йти на всі ці клопоти на github, оскільки ви можете змусити натиснути гілку скидання .
Наступного разу, коли хтось спробує витягнути з вашого сховища, (якщо вони вже вивели погану комісію), витяг не вдасться. Їм доведеться скинути вручну перед зміненою історією вручну, а потім знову потягнути.
git reset HEAD^
git pull
Якщо вони витягнули погану команду і поклали на неї верх , тоді доведеться скинути, а потім git cherry-pick
добрі зобов’язання, які вони хочуть створити, ефективно відтворивши всю гілку без поганих зобов’язань.
Якщо вони ніколи не тягнуть за собою поганий вчинок, то весь цей процес на них не вплине, і вони можуть витягнути як звичайно.
ви можете скинути, щоб HEAD^
потім примусити натиснути.
git reset HEAD^
git push -u origin master --force
Він видалить ваш останній фіксатор і відображатиметься на бітбукеті як видалену комісію, але все ще залишатиметься на їх сервері.
У мене були проблеми з відновленням git в минулому (головним чином, тому що я не зовсім впевнений, як це працює.) У мене виникли проблеми з поверненням через проблеми з злиттям ..
Моє просте рішення це.
Крок 1.
git clone <your repos URL> .
ваш проект в іншій папці, потім:
Крок 2.
git reset --hard <the commit you wanna go to>
потім Крок 3.
у свій останній (і головний) проект проекту (той, який має проблематичну останню фіксацію), вставте файли кроку 2
Крок 4.
git commit -m "Fixing the previous messy commit"
Крок 5.
Насолоджуйтесь
git revert
є простим: він створює нову команду, яка робить зворотну зміну попереднього комітету (або декількох комітів). Він не видаляє комісії, тому це питання не стосується цього питання. Також крок клонування тут насправді не потрібен.
Ось простий підхід у 4 етапи:
0 - Порадьте команду, яку ви збираєте виправити сховище
Підключіться до команди та повідомте про майбутні зміни.
1 - Видаліть останню фіксацію
Припустимо, що ваша цільова галузь master
:
$ git checkout master # move to the target branch
$ git reset --hard HEAD^ # remove the last commit
$ git push -f # push to fix the remote
На цьому момент ви закінчите, якщо працюєте в самоті.
2 - Виправте локальні сховища вашого товариша по команді
Про ваших товаришів по команді:
$ git checkout master # move to the target branch
$ git fetch # update the local references but do not merge
$ git reset --hard origin/master # match the newly fetched remote state
Якщо у вашого товариша по команді не було нових зобов’язань, ви закінчите цей момент, і ви повинні синхронізуватися.
3 - Повернення втрачених комісій
Скажімо, у товариша по команді був новий і неопублікований фактор, який був втрачений у цьому процесі.
$ git reflog # find the new commit hash
$ git cherry-pick <commit_hash>
Зробіть це за стільки, скільки потрібно.
Я успішно використовував такий підхід багато разів. Це вимагає зусиль команди, щоб переконатися, що все синхронізоване.
Як говорили інші, зазвичай ви хочете використовувати hg backout
або git revert
. Однак іноді дуже хочеться позбутися від зобов’язань.
По-перше, ви захочете перейти до налаштувань вашого сховища. Натисніть на Strip commits
посилання.
Введіть ідентифікатор набору змін для набору змін, який ви хочете знищити, і натисніть Preview strip
. Це дозволить вам побачити, який збиток ви збираєтеся зробити, перш ніж це зробити. Тоді просто натисніть, Confirm
і ваша фіксація - це вже не історія. Переконайтесь, що ви скажете всім своїм співавторам про те, що ви зробили, щоб вони випадково не відштовхували правопорушних зобов'язань назад.
Після внесення змін вони не зможуть видалити. оскільки основний характер фіксації - не видаляти.
Що ви можете зробити (простий і безпечний метод),
Інтерактивна база даних:
1) git rebase -i HEAD~2
покаже ваші останні 2 коміти
2) Ваша комісія відображатиметься як "Останні" з'явиться внизу сторінки LILO (остання в "Останній вихід")
Видаліть останній ряд комісій повністю
3) зберегти його за допомогою ctrl+X
абоESC:wq
тепер ваша філія буде оновлена без останнього зобов’язання.
На даний момент хмарний бітбукет (я не впевнений, яка версія) дозволяє повернути комісію з файлової системи наступним чином (я не бачу, як повернути з інтерфейсу Bitbucket в браузері Chrome).
-завантажте весь каталог, щоб захистити зміни, які ви ненавмисно здійснили
-виберіть перевірений каталог
-права кнопка миші: меню черепахового git
-repo-браузер (опція меню "повернути" скасовує лише невпорядковані зміни)
- натисніть кнопку HEAD
-виберіть верхній рядок (остання комірка)
-права кнопка миші: повернути зміни за допомогою цього коміту
-Після того, як ви скасуєте зміни у файловій системі, натисніть кнопку "Ввести"
-це оновлення GIT із повідомленням "Повернутись (попереднє повідомлення). Це повертає так чи інакше "
-виберіть "зробити і натиснути".