Jeśli opublikowany następnie masz rację, że nie chcesz, aby ponownie napisać historię master
. To, czego chcesz, to opublikowanie zatwierdzenia do opanowania, które przywraca stan, w którym było D
przy zachowaniu jego bieżącej historii, aby inni użytkownicy mogli łatwo łączyć lub zmieniać swoją pracę.
Jeśli planujesz w pewnym momencie w przyszłości, aby scalić topic
do master
następnie co pewnie też chce zrobić, to zrobić nową wspólną podstawę między master
i topic
, tak, że kiedy nie później scalić topic
, don” t stracić zatwierdzenia, które zostały cofnięte w master
. Najłatwiej to zrobić, wykonując commit "ponownie" na samym końcu zatwierdzenia "cofnij", który resetuje master
z powrotem do swojego pierwotnego stanu i opierając na nim nową gałąź topic
.
# checkout master branch (currently at G)
git checkout master
# Reset the index to how we want master to look like
git reset D
# Move the branch pointer back to where it should be, leaving the index
# looking like D
git reset --soft [email protected]{1}
# Make a commit (D') for the head of the master branch
git commit -m "Temporarily revert E, F and G"
# Create the new topic branch based on master.
# We're going to make it on top of master and the 'undo'
# commit to ensure that subsequent merges of master->topic
# or topic->master don't merge in the undo.
git checkout -b topic
# Revert the undo commit, making a redo commit (G').
git revert HEAD
Jako alternatywę można dokonały zobowiązuje E „F” i G „ponawianie każdą część osobno, ale jako E, F i G są już w swojej opublikowanej historii to chyba bardziej zrozumiałe, jeśli tylko odwoływać się do” cofnij 'commit i powiedz, że to zatwierdzenie jest cofane. Tak czy inaczej, robi to git revert
.
Zasadniczo to, co wiesz, jest takie.
D -- E -- F -- G -- D' <-- master
\
\
G' <-- topic
najważniejszych rzeczy jest to, że nie został przepisany historii i temat jest oparty na pana tak scala nie przypadkowo stosować żadnych „Cofnij” zobowiązuje. Możesz teraz bezpiecznie przesyłać zarówno master
i topic
do zdalnego repozytorium.
Dzięki, to jest dokładnie to, co zrobiłem teraz (także to, co zasugerowałem w niektórych komentarzach do Jefromi). Historia jest teraz nieco brzydka z powodu tego cofnięcia zatwierdzenia, ale nie mogę nic z tym zrobić. – Albert
2 tygodnie git użytkownika tutaj. Czy nie byłoby łatwiej od pierwszego odgałęzienia G do G ', a następnie "git revert' G do D, w wyniku czego D'? W ten sposób nie musisz cofać/ponawiać niczego, co jest dla mnie o wiele bezpieczniejsze. (Mam już nieodwracalnie utracone zmiany z powodu zakłócenia 'git reset'.) – bart
@bart, spójrz na' git reflog'. Rzeczy, które zostały wyłapane, a następnie spieprzone, powinny być zawsze możliwe do odzyskania przez reflog, przynajmniej przez kilka dni. Możesz jednak nieodwołalnie stracić zmiany, których nie udało Ci się kiedykolwiek zatwierdzić. – dubiousjim