Gałąź z poprzedniego commita przy użyciu Git

Jeśli mam n commitów, Jak mogę rozgałęziać się z N-3 commitów?

Widzę hash każdego commita.

Author: Peter Mortensen, 2010-05-12

13 answers

Możesz utworzyć gałąź za pomocą hasha:

git branch branchname <sha1-of-commit>

Lub za pomocą symbolicznego odniesienia:

git branch branchname HEAD~3

Aby sprawdzić gałąź podczas jej tworzenia, użyj

git checkout -b branchname <sha1-of-commit or HEAD~3>
 1832
Author: CB Bailey,
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-06-18 15:37:34

Aby zrobić to na github.com:

    Idź do swojego projektu.
  1. Kliknij na "commity".
  2. Kliknij na ("Przeglądaj repozytorium w tym momencie historii") na zatwierdzeniu, z którego chcesz się rozgałęziać.
  3. Kliknij na "drzewo: xxxxxx" w lewym górnym rogu. Poniżej paska statystyk językowych pojawi się opcja "Znajdź lub utwórz gałąź" (po prostu wpisz tam nazwę nowej gałęzi) Gałąź z poprzedniego commita
 181
Author: OneSolitaryNoob,
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-01-24 22:38:47

Jeśli nie jesteś pewien, z którego commita chcesz się rozgałęziać, możesz sprawdzić commity i sprawdzić ich kod (zobacz source, compile, test) przez

git checkout <sha1-of-commit>

Gdy znajdziesz commit, z którego chcesz się rozgałęziać, możesz to zrobić z poziomu commita (tzn. bez powrotu do master), po prostu tworząc gałąź w zwykły sposób:

git checkout -b <branch_name>
 56
Author: stanm,
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
2014-02-10 16:43:35

Magia może być wykonana przez git reset .

  1. Utwórz nową gałąź i przełącz się na nią (aby wszystkie ostatnie commity były tutaj przechowywane)

    git checkout -b your_new_branch

  2. Wróć do poprzedniej działającej gałęzi (Załóżmy, że jest to master)

    git checkout master

  3. Usuń najnowsze commity x, utrzymuj master w czystości

    git reset --hard HEAD~x # in your case, x = 3

Od tej chwili, wszystkie najnowsze commity X są tylko w nowej gałęzi, a nie w Twojej poprzedniej pracy / align = "left" /

 55
Author: Jing Li,
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
2015-08-03 09:04:43
git checkout -b <branch-name> <sha1-of-commit>
 17
Author: Tyler Long,
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-07-11 07:11:37

Szybki sposób, aby to zrobić na GitHub repo byłby następujący:

  • Znajdź konkretny commit z Twojej gałęzi
  • obok identyfikatora SHA, kliknij "Przeglądaj repo w tym momencie w historii"
  • Tutaj możesz utworzyć nową gałąź z tego commita Tutaj wpisz opis obrazka
 7
Author: Vatsal Parekh,
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-01-14 17:51:09

Możesz to zrobić w schowku.

  1. Kliknij commit
  2. w prawym górnym rogu ekranu kliknij "Tag this commit"
  3. Następnie możesz utworzyć nową gałąź z tagu, który właśnie utworzyłeś.
 4
Author: David Ruan,
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-01-18 17:20:08

Aby zrobić to w Eclipse:

  • Przejdź do perspektywy "eksploracja repozytorium Git".
  • rozwiń "tagi" i wybierz commit, z którego chcesz utworzyć gałąź.
  • Kliknij prawym przyciskiem myszy na zatwierdzeniu i wybierz "Utwórz gałąź".
  • Podaj nazwę gałęzi.

Utworzy dla Ciebie lokalną gałąź. Wtedy za każdym razem, gdy wypchniesz zmiany, twoja gałąź zostanie przeniesiona na zdalny serwer.

 4
Author: Saurabhcdt,
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-01-24 22:37:44

Świetne powiązane pytanie brzmi: jak do cholery do tego doszedłeś używając --help opcji Gita? Spróbujmy:

git branch --help

Widzimy to wyjście:

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.

Przeszukaj kolejny tekst w poszukiwaniu słowa "Zatwierdź". 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.

Do czegoś zmierzamy!

Teraz skup się na tej linii the gobbledegook:

git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]

Skondensuj to do tego:

git branch <branchname> [<start-point>]
I gotowe.
 3
Author: Purplejacket,
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-07-19 16:35:48

Udało mi się to zrobić tak:

git branch new_branch_name `git log -n 1 --skip 3 --format=%H`

Gdzie należy wprowadzić wartość pominięcia. 0 to najnowszy, 1 to poprzedni, 2 to poprzedni commit, itd.

 3
Author: Mike Graf,
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-01-24 22:36:29

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 był starym commitem należącym do gałęzi master.

 1
Author: Jaime Montoya,
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-06-14 08:23:44

przejdź do konkretnego commita repozytorium git

Czasami podczas pracy nad repozytorium git chcesz wrócić do określonego commita (rewizji), aby mieć migawkę swojego projektu w określonym czasie. Aby to zrobić wystarczy hash SHA-1 commita, 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 commitów i skróconą wersję skrótu SHA-1.

Now that you znając hash commita, do którego chcesz przejść, możesz użyć jednego z następujących 2 poleceń:

git checkout HASH

Lub

git reset --hard HASH

checkout

git checkout <commit> <paths>

Mówi gitowi, aby zamienił bieżący stan ścieżek na ich stan w podanym commicie. Ścieżki mogą być plikami lub katalogami.

Jeśli nie podano gałęzi, git zakłada commit HEAD.

git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.

Jeśli nie podano ścieżki, git przenosi HEAD do podanego commita (zmieniając tym samym commit siedząc i pracując).

git checkout branch //means switching branches.

reset

git reset <commit> //re-sets the current pointer to the given commit.

Jeśli znajdujesz się na gałęzi (zazwyczaj powinieneś być), HEAD i ta gałąź jest przenoszona do commit.

Jeśli jesteś w stanie odłączonym HEAD, git reset porusza się tylko HEAD. aby zresetować gałąź, najpierw sprawdź to.

Jeśli chcesz dowiedzieć się więcej o różnicy między git reset i GIT checkout, polecam przeczytać Oficjalny blog git.

 0
Author: Lyes CHIOUKH,
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-07-20 15:47:56

Wybierz Commit

Dla użytkowników Git GUI możesz zwizualizować całą historię (jeśli to konieczne), a następnie kliknąć prawym przyciskiem myszy na zatwierdzeniu, z którego chcesz się odgałęzić i wprowadzić nazwę gałęzi.

Wprowadź nazwę oddziału

Wizualizuj całą historię

 0
Author: user3070485,
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-08-28 12:04:32