Ik heb twee vestigingen:
- lokale vestiging (degene waarmee ik werk)
- externe branch (openbaar, alleen goed geteste commits gaan daar naartoe)
Onlangs heb ik mijn lokale vestiging ernstig verpest.
Hoe zou ik de lokale vertakking volledig vervangen door de externe, zodat ik mijn werk kan voortzetten vanaf waar de externe vertakking zich nu bevindt?
Ik heb SO al gezocht en lokaal uitchecken naar de remote branch heeft geen effect.
Antwoord 1, autoriteit 100%
- Zorg ervoor dat je de branch die je vervangt hebt uitgecheckt (uit Zoltán’s commentaar).
-
Ervan uitgaande dat master de lokale branch is die je vervangt, en dat “origin/master” de remote branch is waarnaar je wilt resetten:
git reset --hard origin/master
Hiermee wordt uw lokale HEAD-branch bijgewerkt zodat deze dezelfde revisie heeft als origin/master, en --hard
zal deze wijziging ook synchroniseren met de index en werkruimte.
Antwoord 2, autoriteit 16%
Dat is zo eenvoudig als drie stappen:
-
Verwijder je lokale vestiging:
git branch -d local_branch
-
Fetch de nieuwste remote branch:
git fetch origin remote_branch
-
Bouw de lokale branch opnieuw op basis van de remote:
git checkout -b local_branch origin/remote_branch
Antwoord 3, autoriteit 7%
Het verbaast me een beetje dat niemand dit nog heeft genoemd; Ik gebruik het bijna elke dag:
git reset --hard @{u}
Kortom, @{u}
is slechts een afkorting voor de upstream branch die uw huidige branch bijhoudt. Dit komt bijvoorbeeld meestal overeen met origin/[my-current-branch-name]
. Het is leuk omdat het branche-agnostisch is.
Zorg ervoor dat je eerst git fetch
doet om de laatste kopie van de remote branch te krijgen.
Antwoord 4, autoriteit 3%
git branch -D <branch-name>
git fetch <remote> <branch-name>
git checkout -b <branch-name> --track <remote>/<branch-name>
Antwoord 5, autoriteit 2%
Vervang alles door de remote branch; maar, alleen vanaf dezelfde commit waar je lokale vestiging op staat:
git reset --hard origin/some-branch
OF, haal de nieuwsteuit de remote branch en vervang alles:
git fetch origin some-branch
git reset --hard FETCH_HEAD
Terzijde, indien nodig, kunt u niet-getrackte bestanden wissen & mappen die je nog niet hebt vastgelegd:
git clean -fd
Antwoord 6
De veiligste en meest complete manier om de huidige lokale vestiging te vervangen door de afstandsbediening:
git stash
git merge --abort
git rebase --abort
git branch -M yourBranch replaced_yourBranch
git fetch origin yourBranch:yourBranch
git checkout yourBranch
De regel stash
slaat de wijzigingen op die u niet hebt vastgelegd. De regel branch
verplaatst uw branch naar een andere naam, waardoor de oorspronkelijke naam vrijkomt. De regel fetch
haalt het laatste exemplaar van de afstandsbediening op. De regel checkout
reconstrueert de oorspronkelijke vertakking als een volgvertakking.
Of als bash-functie:
replaceWithRemote() {
yourBranch=${1:-`git rev-parse --abbrev-ref HEAD`}
git stash
git merge --abort
git rebase --abort
git branch -M ${yourBranch} replaced_${yourBranch}_`git rev-parse --short HEAD`
git fetch origin ${yourBranch}:${yourBranch}
git checkout ${yourBranch}
}
die de huidige tak hernoemen naar zoiets als vervangende_master_98d258F.
Antwoord 7
Het kan meerdere manieren worden uitgevoerd, waarbij dit antwoord wordt bewerkt voor het verspreiden van beter kennisperspectief.
1) Reset Hard
Als u werkt vanuit de tak op afstand ontwikkelen, kunt u hoofd naar de laatste commit op afstandsbediening resetten zoals hieronder:
git reset --hard origin/develop
2) Verwijder de huidige tak en kies opnieuw uit de Remote Repository
Gezien het feit dat u werkt aan de ontwikkeling van het filiaal in lokale repo, die synchroniseert met de tak van de afstandsbediening / ontwikkelen, kunt u doen zoals hieronder:
git branch -D develop
git checkout -b develop origin/develop
3) Abort samenvoegen
Als u tussen een slecht merge bent (per ongeluk gedaan met verkeerde tak), en wilde het samenvoegen vermijden om terug te gaan naar de tak Laatste zoals hieronder:
git merge --abort
4) Abort Rebase
Als u tussen een slechte rebase bent, kunt u het herbasisverzoek afbreken zoals hieronder:
git rebase --abort
Antwoord 8
je kunt doen als @hugo van @Laurent zei, of je kunt gebruiken git rebase
om de commits te verwijderen die je wilt ontdoen, als je weet welke. Ik heb de neiging om te gebruiken git rebase -i head~N
(waarbij n een nummer is, zodat u de laatste N-commits kunt manipuleren) voor dit soort operaties.
Antwoord 9
Het geselecteerde antwoord is absoluut correct , maar het heeft me niet verlaten met de nieuwste commit / pushen …
Dus voor mij:
git reset --hard dev/jobmanager-tools
git pull ( did not work as git was not sure what branch i wanted)
Omdat ik weet dat ik een paar weken tijdelijk mijn upstream-filiaal wil instellen op een specifieke tak (hetzelfde als degene die ik eerder heb ingeschakeld / gecontroleerd en een harde reset heeft gedaan)
Zo na reset
git branch --set-upstream-to=origin/dev/jobmanager-tools
git pull
git status ( says--> on branch dev/jobmanager-tools
Antwoord 10
Als u de tak wilt bijwerken die momenteel niet is uitgecheckt, kunt u doen:
git fetch -f origin rbranch:lbranch
Antwoord 11
Git Checkout.
Ik gebruik deze opdracht altijd om mijn lokale wijzigingen met repository-veranderingen te vervangen.
Git Checkout Space Dot.
Antwoord 12
Zoals verstrekt in gekozen uitleg, Git Reset is goed.
Maar tegenwoordig gebruiken we vaak submodules: repositories in repositories. U als u bijvoorbeeld ZF3 en JQUERY gebruikt in uw project, wilt u waarschijnlijk waarschijnlijk dat ze worden gekloneerd uit hun oorspronkelijke repositories.
In dat geval is Git Reset niet genoeg.
We moeten submodules bijwerken op die exacte versie die zijn gedefinieerd in onze repository:
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule foreach git submodule update
git status
Het is hetzelfde als u komt (CD) recursief naar de werkmap van elke submodule en wordt uitgevoerd:
git submodule update
en het is heel anders dan
git checkout master
git pull
Omdat submodules niet naar tak, maar naar de commit.
In die gevallen wanneer u handmatig een tak uitcheckt voor 1 of meer submodules
U kunt
uitvoeren
git submodule foreach git pull
Antwoord 13
git reset --hard
git clean -fd
Dit werkte voor mij – clean liet ook alle verwijderde bestanden zien. Als het je vertelt dat je wijzigingen kwijtraakt, moet je het opbergen.
Antwoord 14
- git fetch origin remote_branch
- git reset –hard FETCH_HEAD
Antwoord 15
De lelijke maar eenvoudigere manier: verwijder je lokale map en kloon de externe repository opnieuw.