Câu trả lời:
Bạn có thể tạo chi nhánh thông qua hàm 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
Để kiểm tra chi nhánh khi tạo nó, sử dụng
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
hoạt động git checkout -b <name-of-branch> <sha1-of-commit>
nhưng nếu chi nhánh đã tồn tạigit checkout -B <name-of-branch> <sha1-of-commit>
Để làm điều này trên github.com:
Phép thuật có thể được thực hiện bằng cách thiết lập lại git .
Tạo một nhánh mới và chuyển sang nó (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
Quay trở lại chi nhánh làm việc trước đây của bạn (giả sử đó là chủ)
git checkout master
Xóa các cam kết x mới nhất, giữ sạch chủ
git reset --hard HEAD~x # in your case, x = 3
Kể từ thời điểm này, tất cả các cam kết x mới nhất chỉ ở trong nhánh mới, không phải trong nhánh làm việc trước đó của bạn (chính) nữa.
git reset --hard
không phải là một ý tưởng hay nếu bạn đã đẩy cam kết về nguồn gốc ...
git push --force
nếu bạn đã đẩy chi nhánh trước đó
Nếu bạn không chắc chắn về cam kết nào bạn muốn phân nhánh trước, bạn có thể kiểm tra các cam kết và kiểm tra mã của họ (xem nguồn, biên dịch, kiểm tra) bằng cách
git checkout <sha1-of-commit>
một khi bạn tìm thấy cam kết mà bạn muốn phân nhánh từ bạn có thể thực hiện điều đó từ bên trong cam kết (tức là không cần quay lại chủ trước) chỉ bằng cách tạo một nhánh theo cách thông thường:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
" (từ câu trả lời được chấp nhận) như thế nào?
git checkout -b
để tạo ra một chi nhánh mới.
Một cách nhanh chóng để làm điều đó trên repo Github của bạn sẽ như sau:
Đơn giản chỉ cần chạy:
git checkout -b branch-name <commit>
Ví dụ :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
Các checkout
lệnh với tham số -b
sẽ tạo ra một chi nhánh mới và nó sẽ chuyển bạn qua với nó
git fetch
& git branch
lệnh trên thư mục dự án của bạn bằng thiết bị đầu cuối, sau đó kiểm tra xem nhánh tính năng có tồn tại không, nếu đây là trường hợp thì có, tất nhiên bạn sẽ không thể tạo một nhánh từ các nhánh bị xóa, bạn cũng có thể hoàn nguyên việc xóa chi nhánh trong trường hợp chi nhánh đã biến mất
Một câu hỏi liên quan tuyệt vời là: Làm thế 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 đầu ra 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>]
Cá bống tượng.
Tìm kiếm thông qua 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 đến một nơi nào đó!
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>]
Cô đọng điều này:
git branch <branchname> [<start-point>]
Và thực hiện.
Để làm điều này trong Eclipse:
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 của mình, chi nhánh của bạn sẽ được đẩy đến máy chủ từ xa.
Bạn có thể làm điều đó trong Stash.
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 đó, v.v.
HEAD~1
(trong đó 1 chỉ định 1 cam kết trở lại)?
Điều này tạo ra nhánh với một lệnh:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Tôi thích cách này tốt hơn những cách được công bố ở trên, vì nó tạo ra nhánh ngay lập tức (không yêu cầu thêm lệnh đẩy sau đó).
Sử dụng Sourcetree | Cách dễ nhất.
Đâ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
đã và cam kết cũ thuộc về master
chi nhánh.
Chuyển đến một cam kết cụ thể của kho lưu trữ git
Đôi khi, khi làm việc trên một kho lưu trữ git, bạn muốn quay lại một cam kết cụ thể (sửa đổi) để có một ảnh chụp nhanh dự án của bạn tại một thời điểm cụ thể. Để làm điều đó, tất cả những gì bạn cần là hàm băm SHA-1 của cam kết mà bạn có thể dễ dàng tìm thấy khi kiểm tra nhật ký bằng lệnh:
git log --abbrev-commit --pretty=oneline
sẽ cung cấp cho bạn một danh sách nhỏ gọn tất cả các cam kết và phiên bản ngắn của hàm băm SHA-1.
Bây giờ bạn đã biết hàm băm của cam kết bạn muốn chuyển đến, bạn có thể sử dụng một trong 2 lệnh sau:
git checkout HASH
hoặc là
git reset --hard HASH
Thủ tục thanh toán
git checkout <commit> <paths>
Nói với git để thay thế trạng thái hiện tại của các đường dẫn bằng trạng thái của chúng trong cam kết đã cho. Đường dẫn có thể là tập tin hoặc thư mục.
Nếu không có chi nhánh nào được đưa ra, git sẽ thừa nhận cam kết CHÍNH.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Nếu không có đường dẫn nào được đưa ra, git sẽ di chuyển HEAD
đến cam kết đã cho (từ đó thay đổi cam kết bạn đang ngồi và làm việc).
git checkout branch //means switching branches.
cài lại
git reset <commit> //re-sets the current pointer to the given commit.
Nếu bạn đang ở trên một chi nhánh (bạn nên thường xuyên), HEAD
và nhánh này được chuyển sang cam kết.
Nếu bạn ở HEAD
trạng thái tách rời , git reset chỉ di chuyển HEAD
. Để thiết lập lại một chi nhánh, đầu tiên hãy kiểm tra nó.
Nếu bạn muốn biết thêm về sự khác biệt giữa thiết lập lại git và kiểm tra git, tôi khuyên bạn nên đọc blog git chính thức .
git log --abbrev-commit --pretty=oneline
có thể được viết tắt thànhgit log --oneline
Đối với người dùng GUI Git, bạn có thể hình dung tất cả lịch sử (nếu cần) và sau đó nhấp chuột phải vào cam kết bạn muốn phân nhánh và nhập tên chi nhánh.
Để thực hiện câu trả lời được chấp nhận trong Visual Studio 2015 & 2017:
Nhấp vào thay đổi (mũi tên màu đỏ ở trên)
Nhấp vào Hành động (mũi tên màu đỏ ở trên) và nhấp vào Xem Lịch sử trên Menu DropDown
Và Tab mới sẽ mở ra:
Và bạn nên nhấp chuột phải vào cam kết trước đó mà bạn muốn mã của mình trở lại:
Chọn để kiểm tra một chi nhánh mới và voilá!
Bên dưới, mặc dù không phải là một phần của câu hỏi OP, nhưng tôi làm cả hai và đây là một bước mẹo, ít nhất là với tôi: nếu bạn muốn hoàn nguyên về một cam kết trước đó, mà không kiểm tra một chi nhánh mới, KHÔNG chọn hoàn nguyên (! ?); bạn nên chọn xác định lại - trộn hoặc --hard:
nếu bạn sử dụng cây nguồn khá dễ dàng.
Nếu bạn đang tìm kiếm một giải pháp dựa trên dòng lệnh, bạn có thể bỏ qua câu trả lời của tôi. Tôi sẽ đề nghị bạn sử dụng GitKraken . Đó là một máy khách UI git phi thường. Nó hiển thị cây Git trên trang chủ. Bạn chỉ có thể nhìn vào chúng và biết những gì đang xảy ra với dự án. Chỉ cần chọn một cam kết cụ thể, nhấp chuột phải vào nó và chọn tùy chọn 'Tạo chi nhánh tại đây'. Nó sẽ cung cấp cho bạn một hộp văn bản để nhập tên chi nhánh. Nhập tên chi nhánh, chọn 'OK' và bạn đã được đặt. Nó thực sự rất dễ sử dụng.