Câu hỏi Chi nhánh từ lần commit trước bằng Git


Nếu tôi có n cam kết, làm thế nào tôi có thể chi nhánh từ cam kết n-3?

Tôi có thể thấy băm của mọi cam kết.


1275
2018-05-12 07:21


gốc




Các câu trả lời:


Bạn có thể tạo chi nhánh thông qua một băm:

git branch branchname <sha1-of-commit>

Hoặc bằng cách sử dụng một tham chiếu tượng trưng:

git branch branchname HEAD~3

Để thanh toán chi nhánh khi tạo chi nhánh, hãy sử dụng

git checkout -b branchname <sha1-of-commit or HEAD~3>

1780
2018-05-12 07:24



Bạn cũng có thể dùng git checkout -b branchname <commit> - Ajedi32
Git 1.8.2 cho phép tôi sử dụng sha1 ngắn cho dạng đầu tiên. - Dan Benamy
@ MattFenwick Git sẽ cho phép bạn sử dụng băm rút gọn ở khắp mọi nơi một băm được cho phép, miễn là băm rút gọn là '' duy nhất '' trong kho lưu trữ. Vì vậy, nếu nó không hoạt động, hãy thử thêm một ký tự khác từ băm. - poke
Để đẩy nhánh mới một cách chính xác vào máy chủ .. cần bước cuối cùng này: git push origin BRANCH_NAME - gnB
Đối với những người không chắc chắn, git checkout -b branchname <commit> tạo nhánh mới và chuyển bạn qua nó - information_interchange


Để làm điều này trên github.com:

  1. Tới dự án của bạn.
  2. Nhấp vào "Cam kết".
  3. Nhấp vào <> ("Duyệt kho lưu trữ tại thời điểm này trong lịch sử") trên cam kết bạn muốn phân nhánh.
  4. Nhấp vào "tree: xxxxxx" ở phía trên bên trái. Ngay bên dưới thanh thống kê ngôn ngữ, bạn sẽ có tùy chọn "Tìm hoặc Tạo Chi nhánh" (chỉ cần nhập tên chi nhánh mới vào đó) Branch from previous commit

176
2017-08-08 22:08



Nó vẫn còn hiệu lực phải không? Tôi không thể tìm thấy nó. - Instantsoup
có vẻ như nó đã biến mất rồi. - OneSolitaryNoob
Nó vẫn còn đó! Họ chỉ di chuyển nó. Tôi đã cập nhật hướng dẫn. Lời khuyên tuyệt vời, nhân tiện! - bfred.it
Cảm ơn! Nó chắc chắn là ẩn đi. - OneSolitaryNoob
Bạn là một người tiết kiệm cuộc sống. Tôi đã làm điều tồi tệ nhất với một lực đẩy để làm chủ hôm nay và điều này khiến nhịp tim của tôi trở lại bình thường. - bitwit


Nếu bạn không chắc chắn cam kết nào bạn muốn phân nhánh từ trước, bạn có thể kiểm tra các cam kết và kiểm tra mã của chúng (xem mã nguồn, biên dịch, kiểm thử) bằng cách

git checkout <sha1-of-commit>

một khi bạn tìm thấy cam kết bạn muốn chi nhánh từ bạn có thể làm điều đó từ bên trong cam kết (tức là không quay trở lại chủ đầu tiên) chỉ bằng cách tạo một nhánh theo cách thông thường:

git checkout -b <branch_name>

54
2018-02-10 16:43





Phép thuật có thể được thực hiện bởi git reset.

  1. Tạo một chi nhánh mới và chuyển sang nhánh đó (vì vậy tất cả các cam kết mới nhất của bạn được lưu trữ ở đây)

    git checkout -b your_new_branch

  2. Chuyển về nhánh làm việc trước đó của bạn (giả sử nó là master)

    git checkout master

  3. Xóa x lần commit mới nhất, giữ sạch tổng thể

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

Từ thời điểm này trở đi, tất cả các cam kết x mới nhất chỉ nằm trong nhánh mới, không phải trong nhánh làm việc trước đó của bạn (master) nữa.


50
2017-08-03 09:04



Đây là những gì tôi đang tìm kiếm vì nó loại bỏ các cam kết từ Master và làm cho nó như thể bạn đã nhớ để làm cho các chi nhánh trước khi những cam kết đã được thực hiện. Cảm ơn. - superbeck
Đừng quên rằng git reset --hard không phải là một ý tưởng tốt nếu bạn đã đẩy cam kết xuất xứ ... - LuisF


git checkout -b <branch-name> <sha1-of-commit>

17
2017-07-11 07:11



Điều này khác với "git branch branchname <sha1-of-commit>"(từ câu trả lời được chấp nhận)? - Peter Mortensen
Tôi không biết. Tôi nghĩ chúng tương đương nhau. Tôi luôn sử dụng git checkout -b để tạo chi nhánh mới. - Tyler Long
stackoverflow.com/a/7987711/3590629 git branch ... tạo chi nhánh nhưng để bạn trên nhánh hiện tại. git checkout -b ... tạo nhánh và chuyển bạn đến nó. - esme_louise


Một cách nhanh chóng để làm điều đó trên repo Github của bạn sẽ như sau:

  • Tìm cam kết cụ thể từ chi nhánh của bạn
  • Bên cạnh id SHA, nhấp vào 'Duyệt repo tại thời điểm này trong lịch sử'
  • Ở đây bạn có thể tạo một nhánh mới từ cam kết này enter image description here 

6
2018-01-14 17:51



Điều này thực sự đã lỗi thời - regetskcob
Hey, kiểm tra nó trên github.com, nó vẫn hoạt động - Vatsal Parekh
Câu hỏi không phải là về github. - Anders Tornblad


Bạn có thể làm điều đó trong Stash.

  1. Nhấp vào cam kết
  2. Ở phía trên bên phải của màn hình, hãy nhấp vào "Gắn thẻ cam kết này"
  3. Sau đó, bạn có thể tạo chi nhánh mới từ thẻ bạn vừa tạo.

4
2018-01-18 17:20



GUI là gì? GitHub? - ostrichofevil
Atlassian Stash - David Ruan


Để làm điều này trong Eclipse:

  • Chuyển đến "Git Repository Exploring" Perspective.
  • Mở rộng "Thẻ" và chọn cam kết mà bạn muốn tạo nhánh.
  • Nhấp chuột phải vào cam kết và chọn "Tạo chi nhánh".
  • Cung cấp tên chi nhánh.

Nó sẽ tạo ra một chi nhánh địa phương cho bạn. Sau đó, bất cứ khi nào bạn đẩy các thay đổi, nhánh của bạn sẽ được đẩy đến máy chủ từ xa.


4
2018-05-17 12:03





Một câu hỏi có liên quan tuyệt vời là: Làm cách nào bạn tìm ra điều này bằng cách sử dụng --help tùy chọn git? Chúng ta hãy cố gắng này:

git branch --help

Chúng tôi thấy kết quả này:

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.

Tìm kiếm thông qua các văn bản tiếp theo cho từ "cam kết". Chúng tôi tìm thấy điều này:

   <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.

Chúng ta đang đi đâu đó!

Bây giờ, tập trung vào dòng này của gobbledegook:

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

Điều đó cho điều này:

git branch <branchname> [<start-point>]

Và thực hiện.


3
2017-07-19 16:35



Tôi ghét git. Cảm ơn. - Byron Whitlock


Tôi đã có thể làm như vậy:

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

Nơi bạn phải nhập giá trị bỏ qua. 0 là mới nhất, 1 là trước đó, 2 là cam kết trước đó, vv


3
2018-01-31 21:36



Tại sao không chỉ sử dụng HEAD~1 (trong đó 1 chỉ định 1 cam kết trở lại)? - jduncanator
Cách của bạn được bao phủ bởi câu trả lời đã chọn và hoạt động tốt. Mỏ là một cách khác với câu trả lời được chọn. - Mike Graf


Đây là những gì tôi đã làm:

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

Trong trường hợp này, 8a75b001096536b3216022484af3026aa9c7bb5b là và cam kết cũ thuộc về master chi nhánh.


1
2018-06-14 08:23