Làm thế nào để bạn chỉ đẩy một nhánh Git (và không có các nhánh khác)?


247

Tôi đang làm việc trên một kho lưu trữ git địa phương. Có hai nhánh, masterfeature_x.

Tôi muốn đẩy feature_xđến repo từ xa, nhưng tôi không muốn đẩy các thay đổi trên masternhánh.

Một chi nhánh git push origin feature_xcủa tôi feature_x( feature_xchi nhánh đã tồn tại trên điều khiển từ xa) có hoạt động không?

Tôi không muốn kiểm tra cái này trên hộp của mình, vì tôi không thể đẩy thành thạo ngay bây giờ.


Hãy xem ở đây: từ xa và ở đây: đẩy một nhánh để github Âm thanh như nó sẽ hoạt động.
al.

Câu trả lời:


376

vâng, chỉ cần làm như sau

git checkout feature_x
git push origin feature_x

54
Với git hiện đại, bạn có thể chỉ cần "git push origin HEAD", hoặc thậm chí "git đẩy HEAD" để chỉ đẩy chi nhánh hiện đang thanh toán.
Jakub Narębski

2
Có cần thiết phải thanh toán cho Feature_x không?
hd.

5
có, bởi vì nếu bạn đang làm chủ, nó sẽ cố gắng đẩy nhánh chính cục bộ sang nhánh Feature_x từ xa. để không phải kiểm tra trước tiên, bạn sẽ phải thực hiện "git push origin
Feature_x: Feature_x

1
@cpjolicoeur Tôi thấy trong các câu hỏi khác (ví dụ: ở đây ) họ đang làm git push -u origin <branch-name>. Tuy nhiên bạn đã không đề cập đến nó. Có cần thiết không?
riroo

3
@miss_R -utùy chọn trên một git-pushlệnh sẽ đặt tham chiếu ngược dòng để theo dõi nhánh vừa được đẩy. Điều này sẽ làm cho những thứ như git-pulltrên nhánh đó trong tương lai đã biết nên lấy nhánh nào mà không chỉ định nó. Nó không bắt buộc như là một tùy chọn để đẩy một nhánh duy nhất, nhưng được sử dụng rộng rãi vì rất nhiều người muốn làm cho nhánh cục bộ theo dõi nhánh từ xa mà họ đang đẩy.
cpjolicoeur

74

Theo mặc định git pushcập nhật tất cả các chi nhánh từ xa. Nhưng bạn có thể cấu hình git để chỉ cập nhật nhánh hiện tại lên thượng nguồn.

git config push.default upstream

Nó có nghĩa là git sẽ chỉ cập nhật nhánh hiện tại (đã kiểm tra) khi bạn thực hiện git đẩy.

Các tùy chọn hợp lệ khác là:

  • nothing: Không đẩy bất cứ điều gì (lỗi ra) trừ khi một refspec được đưa ra rõ ràng . Điều này chủ yếu có nghĩa là cho những người muốn tránh sai lầm bằng cách luôn luôn rõ ràng.
  • matching: Đẩy tất cả các nhánh có cùng tên ở cả hai đầu. (tùy chọn mặc định trước Ver 1.7.11)
  • upstream: Đẩy nhánh hiện tại lên nhánh ngược dòng của nó. Chế độ này chỉ có ý nghĩa nếu bạn đang đẩy vào cùng một kho lưu trữ mà bạn thường lấy từ (tức là luồng công việc trung tâm ). Không cần phải có cùng tên cho chi nhánh địa phương và từ xa.
  • tracking: Không dùng nữa, sử dụng upstreamthay thế.
  • current: Đẩy nhánh hiện tại đến nhánh từ xa cùng tên ở đầu nhận. Hoạt động trong cả hai quy trình làm việc trung tâm và không trung tâm.
  • simple: [khả dụng kể từ Ver 1.7.11] trong quy trình làm việc tập trung, hoạt động như upstreamvới một sự an toàn bổ sung để từ chối đẩy nếu tên của nhánh nhánh ngược dòng khác với tên cục bộ. Khi đẩy đến một điều khiển khác với điều khiển từ xa mà bạn thường kéo từ đó, hãy làm việc như current. Đây là lựa chọn an toàn nhất và phù hợp cho người mới bắt đầu. Chế độ này đã trở thành mặc định trong Git 2.0.

2
Cảm ơn, currentlà những gì tôi đang tìm kiếm, theo mặc định git pushtrong foochi nhánh sẽ đẩy nó đến origin/foochi nhánh.
Dorian

@Dorian cảm ơn, tôi đồng ý rằng currentcó ý nghĩa hơn như một mặc định.
Zoltán

@Dorian, @ Zoltán - Tôi cảm thấy simplecó ý nghĩa hơn như một mặc định. Tôi đã cập nhật câu trả lời với 'khi nào nên sử dụng cái gì'. Xin có một cái nhìn.
Karthik Bose

1
Lưu ý: kể từ git phiên bản 2, giá trị mặc định đã thay đổi thành simple.
Danijel

8

Cập nhật nhỏ trên đầu câu trả lời của Karthik Bose - bạn có thể định cấu hình git trên toàn cầu, để ảnh hưởng đến tất cả các không gian làm việc của bạn để hành xử theo cách đó:

git config --global push.default upstream

ngược dòng không được công nhận là một thiết lập hợp lệ đối với tôi, thay vào đó phải đặt 'hiện tại'
châu chấu

-2

Vì vậy, giả sử bạn có một foo chi nhánh địa phương, một từ xa được gọi là nguồn gốc và một nguồn gốc / chủ chi nhánh từ xa.

Để đẩy nội dung của foo sang nguồn gốc / chủ, trước tiên bạn cần đặt ngược dòng của nó:

git checkout foo
git branch -u origin/master

Sau đó, bạn có thể đẩy đến chi nhánh này bằng cách sử dụng:

git push origin HEAD:master

Trong lệnh cuối cùng, bạn có thể thêm - Force để thay thế toàn bộ lịch sử của nguồn gốc / master bằng foo.

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.