Jak zmusić git pull do nadpisania wszystkiego na każdym pullu?

Mam centralne repozytorium, które ma trzy repozytoria deweloperskie ciągnące i pchające do niego normalnie.

Mam również dwa inne repozytoria, które pobierają się z centralnego nagiego repo: jeden jest serwerem live, a drugi jest serwerem testowym / etapowym-każdy pobiera z własnej gałęzi.

Scenariusz jest następujący: mam post-update skrypt Hooka na centralnym repo, który automatycznie uzyskuje dostęp do testów i repozytoriów na żywo i uruchamia polecenie pull na każdym z nich. To aktualizuje zarówno test jak i aktywne serwery, wszystko zależy od tego, która gałąź ma nowe commity. To wszystko działa świetnie.

Problem polega na tym, że w nagłych przypadkach pliki mogą być aktualizowane bezpośrednio na serwerze (przez ftp lub cokolwiek innego), a centralny skrypt po aktualizacji zawiedzie, Ponieważ pojawią się konflikty scalania/nadpisywania. Nie ma sposobu, aby uniknąć tego scenariusza i jest to nieuniknione.

Chciałbym, aby stało się tak: chcę, aby pull z witryn na żywo i testowych do zawsze zastąp / połącz przy ciągnięciu. zawsze. te transakcje repo będą tylko pull-tylko, ponieważ nie są one dla rozwoju.

We wszystkich moich badaniach nie mogę znaleźć dobrego rozwiązania, aby ciągnąć zawsze wymusić nadpisanie plików lokalnych. Czy to w ogóle możliwe? To byłby świetny scenariusz rozwoju, jeśli tak.

 174
Author: Mel, 2012-03-06

7 answers

Naprawdę idealnym sposobem na to jest nie używać pull w ogóle, ale zamiast fetch i reset:

git fetch origin master
git reset --hard FETCH_HEAD
git clean -df

(zmienianie master na dowolną gałąź, którą chcesz podążać.)

pull reset jest zaprojektowany wokół scalania zmian razem w jakiś sposób, podczas gdy reset jest zaprojektowany wokół prostego dopasowania lokalnej kopii do określonego commita.

Możesz rozważyć nieco inne opcje do clean w zależności od potrzeb Twojego systemu.

 439
Author: Amber,
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
2012-03-07 19:40:14

Możesz spróbować tego:

git reset --hard HEAD
git pull

(z Jak wymusić "git pull", aby nadpisać lokalne pliki?)

Innym pomysłem byłoby usunięcie całego Gita i utworzenie nowego klona.

 18
Author: user1251007,
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:25

Nie wiem jak to zrobić jednym poleceniem, ale można zrobić coś w stylu:

git reset --hard
git pull

Lub nawet

git stash
git pull
 6
Author: Matt Wolfe,
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
2012-03-06 18:40:47

Aby pobrać kopię gałęzi i Wymuś nadpisanie plików lokalnych {[3] } z origin użyj:

git reset --hard origin/current_branch

Cała bieżąca praca zostanie utracona i będzie taka sama jak gałąź origin

 4
Author: Andrew Atkinson,
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
2016-03-22 08:39:44
git reset --hard HEAD
git fetch --all
git reset --hard origin/your_branch
 4
Author: Dzmitry,
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
2016-12-23 19:01:05

Możesz zmienić hak, aby wszystko wyczyścić.

# Danger! Wipes local data!

# Remove all local changes to tracked files
git reset --hard HEAD

# Remove all untracked files and directories
git clean -dfx

git pull ...
 2
Author: Dietrich Epp,
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
2012-03-06 18:40:39

Jeśli nie zatwierdziłeś jeszcze lokalnych zmian od ostatniego pull/clone, możesz użyć:

git checkout *
git pull

checkout wyczyści Twoje lokalne zmiany z ostatnim lokalnym zatwierdzeniem i pull skopiuje go do zdalnego repozytorium

 1
Author: Maviles,
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
2016-08-22 17:47:49