develop branch
--> dashboard (working branch)
Używam git merge --no-ff develop
do scalania wszelkich wcześniejszych zmian w desce rozdzielczej
dziennik git:
commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date: Mon Jul 30 08:16:46 2012 -0500
Merge branch 'develop' into dashboard
commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <[email protected]>
Date: Sun Jul 29 10:49:21 2012 -0500
fixed end date edit display to have leading 0
commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date: Sun Jul 29 09:13:24 2012 -0500
Scalanie zawierało około 50+ zatwierdzeń i zastanawiam się, jak po prostu cofnąć scalanie, aby pulpit nawigacyjny powrócił do stanu sprzed scalenia
Druga część tego jest taka, że jeśli się nie połączę --no-ff
, nie dostaję zatwierdzenia „ Scal gałąź” rozwijaj się w pulpit nawigacyjny . Jak mógłbym przywrócić to scalenie?
Odpowiedzi:
Cofnięcie zatwierdzenia scalania zostało wyczerpująco omówione w innych pytaniach. Podczas scalania szybkiego przewijania, drugiego, który opisujesz, możesz użyć,
git reset
aby wrócić do poprzedniego stanu:Można wybrać
<commit_before_merge>
zgit reflog
,git log
lub, jeśli czujesz się Moxy (i nie zrobił nic innego):git reset --hard HEAD@{1}
źródło
reflog
ratownik.HEAD@{1}
po prostu opisuje drugi ostatni stan HEAD, lub bardziej technicznie: „Ref, po którym następuje sufiks @ ze specyfikacją porządkową zawartą w parze nawiasów (np. {1}, {15}) określa n-tą poprzednią wartość tego ref. ”Stąd:
http://www.christianengvall.se/undo-pushed-merge-git/
Git revert dodaje nowe zatwierdzenie, które przywraca określone zatwierdzenie.
Użycie -m 1 mówi, że jest to scalenie i chcemy przywrócić do nadrzędnego zatwierdzenia w gałęzi master. Użyj -m 2, aby określić gałąź rozwoju.
źródło
here
link w komentarzu @Hilikus nie jest już prawidłowy. Witryna twierdzi, że treść została przeniesiona do książki ( git-scm.com/book/en/v2 ), ale jeśli tak, zlokalizowanie w niej nie jest trywialne.Wystarczy zresetować zatwierdzenie scalania za pomocą
git reset --hard HEAD^
.Jeśli użyjesz opcji --no-ff git zawsze tworzy scalenie, nawet jeśli nic nie zostało popełnione pomiędzy. Bez --no-ff git zrobi tylko szybkie przewijanie do przodu, co oznacza, że HEAD twoich gałęzi zostanie ustawiony na HEAD połączonej gałęzi. Aby rozwiązać ten problem, znajdź identyfikator zatwierdzenia, do którego chcesz przywrócić i
git reset --hard $COMMITID
.źródło
Ale może mieć nieoczekiwane skutki uboczne. Zobacz
--mainline parent-number
opcję w git-scm.com/docs/git-revertByć może brutalnym, ale skutecznym sposobem byłoby sprawdzenie lewego nadrzędnego tego zatwierdzenia, wykonanie kopii wszystkich plików,
HEAD
ponowne pobranie i zastąpienie całej zawartości starymi plikami. Następnie git powie ci, co jest wycofywane, i utworzysz własne zatwierdzenie przywrócenia :)!źródło
Reverting a merge commit declares that you will never want the tree changes brought in by the merge. As a result, later merges will only bring in tree changes introduced by commits that are not ancestors of the previously reverted merge. This may or may not be what you want.
git reset
to rozwiązanie, ale wspomnij również, że może mieć nieoczekiwane skutki uboczne. Jednak ten link pochodzigit revert
, a niegit reset
:)git revert
niegit reset
Jeśli scaliłeś gałąź, to cofnąłeś scalenie za pomocą żądania ściągnięcia i scaliłeś to żądanie ściągnięcia, aby przywrócić.
Najłatwiej czułem:
git revert -m 1 xxxxxx
(jeśli przywrócenie zostało scalone za pomocą oddziału) lub za pomocą,git revert xxxxxx
jeśli było to proste przywrócenieźródło