Trong Git, sự khác biệt giữa origin / master so với origin master là gì?


290

Tôi biết, nguồn gốc là một thuật ngữ cho kho lưu trữ từ xa và chủ là chi nhánh ở đó.

Tôi cố tình bỏ qua "bối cảnh" ở đây và tôi hy vọng rằng câu trả lời không nên phụ thuộc vào bối cảnh. Vì vậy, trong các dòng lệnh git, sự khác biệt giữa origin / masterorigin master là gì . Có một cách không mơ hồ để hiểu khi nào nên sử dụng origin / master và khi nào tôi nên sử dụng master master ?


Câu trả lời:


390

Thực tế có ba điều ở đây: origin masterlà hai điều riêng biệt, và origin/masterlà một điều. Ba điều tổng cộng.

Hai nhánh:

  • master là một chi nhánh địa phương
  • origin/masterlà một nhánh từ xa (là một bản sao cục bộ của nhánh có tên "master" trên remote có tên "origin")

Một điều khiển từ xa:

  • origin là một điều khiển từ xa

Ví dụ: kéo theo hai bước

origin/masterlà một nhánh, bạn có thể hợp nhất nó. Đây là một bước trong hai bước:

Bước một, lấy mastertừ xa origin. Các masterchi nhánh trên originsẽ được lấy và bản sao cục bộ sẽ được đặt tên origin/master.

git fetch origin master

Sau đó, bạn hợp nhất origin/masterthành master.

git merge origin/master

Sau đó, bạn có thể đẩy các thay đổi mới của mình mastertrở lại origin:

git push origin master

Thêm ví dụ

Bạn có thể tìm nạp nhiều nhánh theo tên ...

git fetch origin master stable oldstable

Bạn có thể hợp nhất nhiều chi nhánh ...

git merge origin/master hotfix-2275 hotfix-2276 hotfix-2290

5
Phần đầu tiên thực sự hữu ích. Tôi không thể kết nối làm thế nào nhiều ví dụ, đặc biệt là hợp nhất được áp dụng. Cảm ơn câu trả lời.
Senthil Kumaran

1
... bởi vì khi tôi "git checkout origin / master", tôi rơi vào trạng thái tách rời. Nếu tôi thực sự có một bản sao cục bộ của nhánh chính từ xa, tại sao tôi không thể làm việc và cam kết và thêm vào nó? Hoặc có lẽ tôi có thể, nhưng tại sao nó lại tách ra?
stu

3
Bạn chỉ có thể cam kết với một chi nhánh địa phương, vì vậy khi bạn kiểm tra một chi nhánh từ xa, bạn sẽ nhận được "đầu tách ra". Tất nhiên, đó là một bản sao cục bộ của một chi nhánh từ xa, nhưng nó vẫn là một chi nhánh từ xa. Không có quy tắc nào cho thấy "master" có liên quan đến "origin / master" cả, chúng có thể hoàn toàn khác nhau.
Dietrich Epp

7
@ Jwan622 "origin là một từ xa" ... "origin" chỉ là một tên, bạn có thể chọn bất kỳ tên nào cho điều khiển từ xa nhưng "origin" là tên mặc định. Một điều khiển từ xa là một kho lưu trữ ở một nơi khác. Nó có thể là GitHub hoặc nó có thể là một máy tính khác hoặc thậm chí có thể ở một nơi khác trên cùng một máy tính.
Dietrich Epp

2
@ Jwan622: "git remote add" là lệnh tạo một điều khiển từ xa mới. "nguồn gốc" là tên mà điều khiển từ xa thêm vào. Vì "nguồn gốc" chỉ là một tên, bạn có thể chọn một tên khác nếu bạn muốn. Ví dụ: git remote add home my-server:projects/my-projectthêm một điều khiển từ xa có tên "nhà". Bạn có thể muốn tham khảo tài liệu: git-scm.com/docs/git-remote
Dietrich Epp

16

origin/masterlà một thực thể (vì nó không phải là một nhánh vật lý) đại diện cho trạng thái của masternhánh trên điều khiển từ xa origin.

origin masterlà chi nhánh mastertrên remote origin.

Vì vậy, chúng tôi có những điều này:

  • origin / master (Một đại diện hoặc một con trỏ tới nhánh từ xa)
  • thạc sĩ - ( chi nhánh thực tế )
  • <Your_local_branch> ( chi nhánh thực tế )
  • <Your_local_branch2> ( chi nhánh thực tế )
  • <Your_local_branch3> ( chi nhánh thực tế )

Ví dụ (tại chi nhánh địa phương master):

git fetch # get current state of remote repository
git merge origin/master # merge state of remote master branch into local branch
git push origin master # push local branch master to remote branch master

24
Điều này không chính xác ... origin masterkhông phải là một nhánh ... thực tế nó là hai thứ riêng biệt, "nguồn gốc" (một điều khiển từ xa) và "chủ" (một nhánh địa phương).
Dietrich Epp

Trạng thái của nhánh chủ từ xa, có mặt tại địa phương, phải không?
Senthil Kumaran

4
vâng, điều này không chính xác origin/masterlà chi nhánh chủ từ xa. Chi nhánh địa phương chỉ là chủ.
Aniket Thakur

5

origin/mastermasterchi nhánh từ xa

Thông thường sau khi thực hiện git fetch originđể mang tất cả các thay đổi từ máy chủ, bạn sẽ thực hiện một git rebase origin/master, để phản ứng lại các thay đổi của bạn và chuyển chi nhánh sang chỉ mục mới nhất. Ở đây, origin/masterđề cập đến chi nhánh từ xa, bởi vì về cơ bản, bạn đang nói với GIT để khởi động lại origin/masterchi nhánh trên chi nhánh hiện tại.

Bạn sẽ sử dụng origin masterkhi đẩy, ví dụ. git push origin masterchỉ đơn giản là bảo GIT đẩy vào kho lưu trữ từ xa masterchi nhánh cục bộ .


1
Điều này dường như thực sự gần nhất với những gì OP đang tìm kiếm - origin masterđang bảo phần mềm làm gì đó với bất cứ thứ gì có trên 'master' trong kho 'gốc'. origin/masterlà một tài liệu tham khảo theo cùng một cách f3a4d5hoặc HEADlà.
Nemearial

4

nguồn gốc là một tên cho url git từ xa. Có thể có nhiều ví dụ từ xa hơn dưới đây.

bangalore => bangalore.example.com:project.git

boston => boston.example.com:project.git

theo như nguồn gốc / chủ (ví dụ bangalore / master), nó là con trỏ để cam kết "chính chủ" trên trang web bang hề . Bạn nhìn thấy nó trong bản sao của bạn.

Có thể là bang hề từ xa đã tiến bộ kể từ khi bạn thực hiện "tìm nạp" hoặc "kéo"


2

Với thực tế là bạn có thể chuyển sang origin/master(mặc dù ở trạng thái tách rời) trong khi rút cáp mạng, nó phải là đại diện cục bộ của masterchi nhánh tại origin.


Trong các câu trả lời trên và dưới đây, mọi người nói nguồn gốc / chủ là nhánh chính từ xa. Câu trả lời của bạn là loại mâu thuẫn với những gì họ nói. Xin hãy giải thích.
Luna Lovegood
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.