Git pull into wrong branch

Ja i jeden inny programista łączyliśmy i przenosiliśmy naszą pracę do innej gałęzi zwanej toolwork. W ten sposób nie wpłynęliśmy na resztę drużyny. Moja gałąź tematyczna nazywała się DPM-93, a mój przepływ pracy w git był taki.

# do some work
git checkout DPM-93
git commit -m "did some work"

# catch up
git checkout toolwork
git pull origin toolwork

# rebase my topic branch
git checkout DPM-93
git rebase toolwork

# merge and push my changes
git checkout toolwork
git merge --no-ff DPM-93
git push origin toolwork

To w większości działało dobrze, dopóki nie przypadkowo wydałem tych komend git

git checkout toolwork
git pull origin master

W tym momencie pojawiło się kilka nowych rzeczy w branch toolwork i nie jestem pewien, jak się ich pozbyć, usuwając Mój obszar roboczy i ponownie klonując z repo.

Czy jest jakiś sposób, aby to cofnąć do stanu przed pociągnięciem?
Author: milkplus, 2010-10-22

5 answers

git reset --hard ORIG_HEAD 

Z git reset strona podręcznika (Jeśli po prostu wykonałeś pull):

Cofnij połączenie lub pociągnij

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)
  1. próba aktualizacji z upstream spowodowała wiele konfliktów; nie byłeś gotowy poświęcić dużo czasu na scalanie w tej chwili, więc zdecydowałeś się zrobić to później.
  2. "pull" nie wykonał commita merge, więc "git reset --hard", który jest synonimem "git reset --hard HEAD " czyści bałagan z pliku indeksu i Drzewa roboczego.
  3. Połącz gałąź tematyczną z bieżąca gałąź, co zaowocowało szybkim rozwojem.
  4. ale zdecydowałeś, że gałąź tematyczna nie jest jeszcze gotowa do użytku publicznego.
    "pull" lub "merge" zawsze pozostawia oryginalną końcówkę bieżącej gałęzi w ORIG_HEAD, Resetowanie twardego powoduje powrót pliku indeksu i Drzewa roboczego do tego stanu i zresetowanie wierzchołka gałęzi do tego commita.

Zobacz HEAD oraz ORIG_HEAD Po Więcej.

 88
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:16

Reset gałęzi master:

git reset --hard origin/master
 52
Author: Homero Barbosa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-15 03:16:05

Możesz użyć git log, aby znaleźć SHA-1 rewizji, którą chcesz mieć na czele swojej gałęzi toolwork, a następnie użyć git reset --hard <SHA1>, aby przywrócić kopię roboczą do tej rewizji.

Cofnij wszystko! I przeczytaj ponownie stronę podręcznika dla git reset, aby upewnić się, że robi to, co chcesz.

EDIT: o tak, ORIG_HEAD powinno zawierać właściwe SHA-1. Ale najpierw sprawdź.

 9
Author: Cameron Skinner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-22 16:29:57

Zrobiłem ostatnio podobną rzecz i zastosowałem prostsze rozwiązanie oparte na tej odpowiedzi .

Zakładając, że stan gałęzi toolwork, do której chcesz powrócić został przesunięty do origin, możesz po prostu zrobić

git fetch origin
git reset --hard origin/toolwork

W moim przypadku wartość ORIG_HEAD została nadpisana przez inne scalenie w innej gałęzi i nie musiałem się martwić o szukanie poprawnego commita w dzienniku.

 4
Author: zelanix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:19

To, co dla mnie zadziałało, to po prostu

git reset --hard

Zrobiłem to z lokalnego repozytorium z niefortunnym merge / pull:

Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2|MERGING)
$ git reset --hard
HEAD is now at 2d5a511 [last commit comment]

Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2)
$
 0
Author: ssaltman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 14:04:07