Tạo một nhánh trong Git từ một nhánh khác


989

Tôi có hai nhánh: chủdev

Tôi muốn tạo một "nhánh tính năng" từ nhánh dev .

Hiện tại trên chi nhánh dev, tôi làm:

$ git checkout -b myfeature dev

... (Một số việc)

$ git commit -am "blablabla"
$ git push origin myfeature

Nhưng, sau khi hình dung các chi nhánh của mình, tôi đã nhận được:

--**master**
------0-----0-----0-----0-----0
------------------------**dev**----**myfeature**

Ý tôi là chi nhánh dường như được hợp nhất và tôi không hiểu tại sao ...

Tôi đang làm gì sai?

Bạn có thể giải thích cho tôi cách bạn phân nhánh từ một chi nhánh khác và đẩy trở lại kho lưu trữ từ xa cho chi nhánh tính năng không?

Tất cả điều đó trong một mô hình phân nhánh như mô tả ở đây .

Câu trả lời:


1431

Nếu bạn thích phương thức trong liên kết bạn đã đăng, hãy xem Git Flow .

Đó là một tập các kịch bản anh ta tạo ra cho quy trình công việc đó.

Nhưng để trả lời câu hỏi của bạn:

$ git checkout -b myFeature dev

Tạo nhánh MyFeature tắt dev. Làm việc của bạn và sau đó

$ git commit -am "Your message"

Bây giờ hợp nhất các thay đổi của bạn với dev mà không cần chuyển tiếp nhanh

$ git checkout dev
$ git merge --no-ff myFeature

Bây giờ đẩy các thay đổi đến máy chủ

$ git push origin dev
$ git push origin myFeature

Và bạn sẽ thấy nó như thế nào bạn muốn nó.


32
tầm quan trọng của việc đẩy myFeaturesau khi nó đã được sáp nhập là devgì?
Alexander Suraphel

3
@spartacus Nếu myFeaturechi nhánh được đẩy đến máy chủ trước khi hợp nhất, thì không có gì. Nhưng nếu myFeaturechưa được đẩy đến máy chủ và bạn muốn nó xuất hiện trong máy chủ, bạn phải đẩy nó ra.
xOneca

15
git checkout -b myFeature devgiống như những 3 lệnh: git checkout dev, sau đó git branch myFeature, và sau đó git checkout myFeature?
Kevin Meredith

3
Nó là, hoặc nó nên được. Bạn đang thấy một cái gì đó khác nhau?
Abizern

33
Để làm rõ cho những người mới khác, đây là giao diện --no-ffhợp nhất
A__

407

Nếu bạn muốn tạo một nhánh mới từ bất kỳ nhánh nào trong Git, chỉ cần làm theo các tùy chọn.

Đầu tiên thay đổi / kiểm tra vào chi nhánh từ nơi bạn muốn tạo một chi nhánh mới. Ví dụ: nếu bạn có các nhánh sau như:

  • bậc thầy
  • nhà phát triển
  • chi nhánh1

Vì vậy, nếu bạn muốn tạo một nhánh mới gọi là "subbranch_of_b1" trong nhánh có tên "nhánh1", hãy làm theo các bước:

  1. Thanh toán hoặc thay đổi thành "chi nhánh1"

    git checkout branch1
    
  2. Bây giờ hãy tạo nhánh mới của bạn được gọi là "subbranch_of_b1" trong "nhánh1" bằng lệnh sau.

    git checkout -b subbranch_of_b1 branch1
    

    Ở trên sẽ tạo ra một nhánh mới gọi là subbranch_of_b1 dưới nhánh nhánh1 (lưu ý rằng branch1trong lệnh trên không bắt buộc vì HEAD hiện đang trỏ đến nó, bạn có thể chính xác nếu bạn ở một nhánh khác).

  3. Bây giờ sau khi làm việc với subbranch_of_b1, bạn có thể cam kết và đẩy hoặc hợp nhất nó cục bộ hoặc từ xa.

Một ví dụ minh họa đồ họa về việc tạo các nhánh dưới một nhánh khác

đẩy subbranch_of_b1 vào điều khiển từ xa

 git push origin subbranch_of_b1 

7
Làm thế nào để đẩy subbranch_of_b1 vào remote ??
dùng269867

13
@ user269867: "git push origin subbranch_of_b1" sẽ thực hiện công việc này cho bạn.
Praveen George

4
Bây giờ, nếu tôi đẩy các thay đổi thành chủ, nó sẽ tự động xảy ra trong nhánh1 chứ?
Thầy Yoda

2
lưu ý rằng nhánh1 trong lệnh trên không bắt buộc vì hiện tại CHÍNH đang chỉ vào nó, bạn có thể chính xác nếu bạn ở một nhánh khác mặc dù đó là điều tôi đang tìm kiếm
felipsmartins

10
Tôi đến đây tự hỏi nếu git checkout -b some-branchlà tốc ký cho git checkout -b some-branch master. Hóa ra đó git checkout -b some-branchlà tốc ký chogit checkout -b some-branch <current_active_branch>
Frank Henard

45

Tạo một chi nhánh

  • Tạo chi nhánh khi chi nhánh chính được kiểm tra. Ở đây cam kết trong master sẽ được đồng bộ hóa với nhánh bạn đã tạo.

    $ git branch branch1

  • Tạo nhánh khi nhánh1 được kiểm tra. Ở đây cam kết trong nhánh1 sẽ được đồng bộ hóa với nhánh2

    $ git branch branch2


Thanh toán chi nhánh

lệnh git checkout chuyển nhánh hoặc khôi phục tập tin cây làm việc

  • $ git checkout branchname

Đổi tên chi nhánh

  • $ git branch -m branch1 newbranchname

Xóa một chi nhánh

  • $ git branch -d branch-to-delete
  • $ git branch -D branch-to-delete ( xóa lực lượng mà không kiểm tra trạng thái hợp nhất )

Tạo và chuyển đổi chi nhánh

  • $ git checkout -b branchname

Chi nhánh hoàn toàn được bao gồm

  • $ git branch --merged


************************** chi nhánh khác biệt [git diff branch1..branch2] ************** ******

Sự khác biệt đa dòng
  • $ git diff master..branch1
Khác biệt đơn
  • $ git diff --color-words branch1..branch2

1
Ngoài ra sau khi đổi tên nhánh sử dụng git push origin :old-name new-nameđể xóa nhánh từ xa tên cũ và đẩy nhánh cục bộ tên mới.
95faf8e76605e973

13

Làm đồng thời trên devnhánh. Điều xảy ra là trong kịch bản của bạn, nhánh tính năng di chuyển về phía trước từ đỉnh của nhánh dev, nhưng nhánh dev không thay đổi. Dễ dàng vẽ như một đường thẳng, bởi vì nó có thể được coi là chuyển động về phía trước. Bạn đã đi đến điểm A trên dev và từ đó bạn chỉ cần tiếp tục đi trên một con đường song song. Hai nhánh chưa thực sự chuyển hướng.

Bây giờ, nếu bạn thực hiện một cam kết trên dev, trước khi hợp nhất, bạn sẽ lại bắt đầu ở cùng một cam kết, A, nhưng bây giờ các tính năng sẽ chuyển đến C và dev thành B. Điều này sẽ hiển thị sự phân chia mà bạn đang cố gắng hình dung, như các nhánh bây giờ đã chuyển hướng.

*-----*Dev-------*Feature

Đấu với

       /----*DevB
*-----*DevA
       \----*FeatureC

9

Git 2.23 giới thiệu git switchgit restorephân chia trách nhiệm củagit checkout

Tạo một nhánh mới từ một nhánh hiện có kể từ git 2.23:

git switch -c my-new-branch

Chuyển sang một nhánh mới 'my-new-Branch'

  • -c là viết tắt của --Tạo và thay thế nổi tiếng git checkout -b

Hãy xem bài đăng trên blog Github này giải thích các thay đổi chi tiết hơn:

Git 2.23 mang đến một cặp lệnh thử nghiệm mới cho bộ các lệnh hiện có: git switchgit restore . Hai cái này có nghĩa là cuối cùng sẽ cung cấp một giao diện tốt hơn cho việc kiểm tra git nổi tiếng. Các lệnh mới có ý định phân tách rõ ràng, sắp xếp gọn gàng những gì nhiều trách nhiệm của thanh toán git


9

Để tạo một nhánh từ một nhánh khác trong thư mục cục bộ của bạn, bạn có thể sử dụng lệnh sau.

git checkout -b <sub-branch> branch

Ví dụ:

  • Tên của nhánh mới sẽ được tạo 'XYZ'
  • Tên của nhánh ABC theo đó XYZ phải được tạo
git checkout -b XYZ ABC

3

Nếu bạn muốn tạo một nhánh từ một số nhánh khác thì hãy làm theo các bước dưới đây:

Giả định :

  1. Bạn hiện đang ở chi nhánh.
  2. Bạn không có thay đổi để cam kết. (Nếu bạn có bất kỳ thay đổi nào để cam kết, hãy bỏ qua nó!).
  3. BranchExistinglà tên của nhánh mà bạn cần tạo một nhánh mới có tên BranchMyNew.

Các bước :

  1. Lấy chi nhánh đến máy cục bộ của bạn.

    $ git fetch origin BranchExisting : BranchExisting
    

Lệnh này sẽ tạo một nhánh mới trong địa phương của bạn với cùng tên nhánh.

  1. Bây giờ, từ kiểm tra chi nhánh chính đến chi nhánh mới được tìm nạp

    $ git checkout BranchExisting
    
  2. Bạn hiện đang ở BranchEx hiện tại. Bây giờ tạo một chi nhánh mới từ chi nhánh hiện có này.

    $ git checkout -b BranchMyNew
    

Bạn đi đây!


1

Để tạo một nhánh từ một người khác cũng có thể sử dụng cú pháp này:

git push origin refs/heads/<sourceBranch>:refs/heads/<targetBranch>

Nó ngắn hơn một chút so với "git checkout -b" + "git push origin"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.