Odpowiedzi:
Możesz utworzyć oddział za pomocą skrótu:
git branch branchname <sha1-of-commit>
Lub używając symbolicznego odniesienia:
git branch branchname HEAD~3
Aby pobrać gałąź podczas jej tworzenia, użyj
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
uruchomienia, git checkout -b <name-of-branch> <sha1-of-commit>
ale jeśli gałąź już istniejegit checkout -B <name-of-branch> <sha1-of-commit>
Aby to zrobić na github.com:
Magię można wykonać za pomocą git reset .
Utwórz nowy oddział i przełącz się na niego (aby wszystkie najnowsze zatwierdzenia były tutaj przechowywane)
git checkout -b your_new_branch
Wróć do poprzedniej działającej gałęzi (zakładając, że jest to master)
git checkout master
Usuń ostatnie x zatwierdzeń, utrzymuj master w czystości
git reset --hard HEAD~x # in your case, x = 3
Od tego momentu wszystkie ostatnie x zatwierdzeń znajdują się tylko w nowej gałęzi, a nie w poprzedniej działającej gałęzi (master).
git reset --hard
nie jest dobrym pomysłem, jeśli już zepchnąłeś zobowiązanie do powstania ...
git push --force
jeśli już wcześniej pchnąłeś gałąź
Jeśli nie masz pewności, z którego zatwierdzenia chcesz rozgałęzić się z wyprzedzeniem, możesz sprawdzić zatwierdzenia i zbadać ich kod (patrz źródło, kompilacja, test) przez
git checkout <sha1-of-commit>
po znalezieniu zatwierdzenia, które chcesz rozgałęzić, możesz to zrobić z zatwierdzenia (tzn. bez powrotu do głównego), po prostu tworząc gałąź w zwykły sposób:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
” (od zaakceptowanej odpowiedzi)?
git checkout -b
do tworzenia nowego oddziału.
Szybki sposób na wykonanie tego w repozytorium Github byłby następujący:
Po prostu uruchom:
git checkout -b branch-name <commit>
Na przykład :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
checkout
Polecenie z parametrem -b
będzie tworzyć nowy oddział I będzie się przełączać cię do niego
git fetch
i git branch
polecenie w folderze projektu za pomocą terminala, a następnie sprawdź, czy gałąź funkcji istnieje, jeśli tak, to tak, oczywiście nie będzie można utworzyć gałęzi z usuniętych gałęzi, możesz również cofnąć usunięcie gałęzi, jeśli oddział zniknął
Świetnie powiązane pytanie brzmi: jak do cholery wymyśliłeś to, używając --help
opcji git? Spróbujmy tego:
git branch --help
Widzimy ten wynik:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook.
Wyszukaj w kolejnym tekście słowo „zatwierdzenie”. Znajdujemy to:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
Dostajemy gdzieś!
Teraz skup się na tej linii gobbledegook:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Kondensuj to do tego:
git branch <branchname> [<start-point>]
I zrobione.
Aby to zrobić w Eclipse:
Stworzy dla ciebie lokalny oddział. Następnie za każdym razem, gdy wprowadzasz zmiany, twoja gałąź będzie wypychana na zdalny serwer.
Możesz to zrobić w Skrytce.
Byłem w stanie to zrobić tak:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Gdzie musisz wpisać wartość pominięcia. 0 oznacza ostatni, 1 poprzedni, 2 poprzedni, itd.
HEAD~1
(gdzie 1 oznacza 1 zatwierdzenie z powrotem)?
To tworzy gałąź za pomocą jednego polecenia:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Wolę ten sposób lepiej niż te opublikowane powyżej, ponieważ tworzy on gałąź natychmiast (nie wymaga później dodatkowej komendy push).
Korzystanie z Sourcetree | Najłatwiejszy sposób.
Oto co zrobiłem:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
W tym przypadku 8a75b001096536b3216022484af3026aa9c7bb5b
był i stary commit należący do master
oddziału.
Przejdź do konkretnego zatwierdzenia repozytorium git
Czasami pracując nad repozytorium git, chcesz wrócić do określonego zatwierdzenia (rewizji), aby mieć migawkę swojego projektu w określonym czasie. Aby to zrobić, potrzebujesz skrótu SHA-1 zatwierdzenia, który można łatwo znaleźć sprawdzając dziennik za pomocą polecenia:
git log --abbrev-commit --pretty=oneline
który da ci zwartą listę wszystkich zatwierdzeń i krótką wersję skrótu SHA-1.
Teraz, gdy znasz skrót do zatwierdzenia, do którego chcesz przejść, możesz użyć jednego z następujących 2 poleceń:
git checkout HASH
lub
git reset --hard HASH
sprawdzić
git checkout <commit> <paths>
Mówi gitowi, aby zastąpił bieżący stan ścieżek ich stanem w danym zatwierdzeniu. Ścieżki mogą być plikami lub katalogami.
Jeśli nie podano gałęzi, git zakłada zatwierdzenie HEAD.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Jeśli nie podano ścieżki, git przechodzi HEAD
do podanego zatwierdzenia (zmieniając tym samym zatwierdzenie, nad którym siedzisz i pracujesz).
git checkout branch //means switching branches.
Resetowanie
git reset <commit> //re-sets the current pointer to the given commit.
Jeśli jesteś na gałęzi (zwykle powinieneś być), HEAD
a gałąź ta jest przenoszona do zatwierdzenia.
Jeśli jesteś w HEAD
stanie odłączonym , git reset się porusza HEAD
. Aby zresetować gałąź, najpierw ją sprawdź.
Jeśli chcesz dowiedzieć się więcej o różnicy między resetem git a kasą git, polecam przeczytać oficjalny blog git .
git log --abbrev-commit --pretty=oneline
może być skróconegit log --oneline
Dla użytkowników Git GUI możesz wizualizować całą historię (jeśli to konieczne), a następnie kliknąć prawym przyciskiem myszy zatwierdzenie, z którego chcesz rozgałęzić i wprowadzić nazwę oddziału.
Aby wykonać zaakceptowaną odpowiedź w programie Visual Studio 2015 i 2017:
Kliknij zmiany (czerwona strzałka powyżej)
Kliknij opcję Działania (czerwona strzałka powyżej) i kliknij opcję Wyświetl historię w menu DropDown
I otworzy się nowa karta:
I powinieneś kliknąć prawym przyciskiem myszy poprzednie zatwierdzenie, do którego chcesz przywrócić kod:
Wybierz do kasy nowego oddziału i voilá!
Poniżej, choć nie jest to pytanie OP, ale robię dużo, a ten jest podstępny, przynajmniej dla mnie: jeśli chcesz powrócić do poprzedniego zatwierdzenia, bez kasy nowego oddziału, NIE wybieraj cofania (! ?); powinieneś wybrać przedefiniowanie - zmieszany lub - twardy:
jeśli używasz drzewa źródeł, które jest dość proste.
Jeśli szukasz rozwiązania opartego na wierszu poleceń, możesz zignorować moją odpowiedź. Sugeruję, abyś użył GitKraken . To niezwykły klient interfejsu git. Pokazuje drzewo Git na stronie głównej. Możesz po prostu na nie spojrzeć i wiedzieć, co się dzieje z projektem. Wystarczy wybrać konkretny zatwierdzenie, kliknąć go prawym przyciskiem myszy i wybrać opcję „Utwórz gałąź tutaj”. Zostanie wyświetlone pole tekstowe do wprowadzenia nazwy oddziału. Wpisz nazwę oddziału, wybierz „OK” i gotowe. Jest naprawdę bardzo łatwy w użyciu.