2011-11-17 45 views
24

Tôi muốn đẩy chi nhánh hiện tại của tôi (HP1) vớiGit push: đặt mục tiêu cho chi nhánh

git push 

và không

git push origin hp1:team/hp1 

Các chi nhánh từ xa đã tồn tại.

chi nhánh địa phương của tôi:

develop 
master 
* hp1 

git chương trình từ xa nguồn gốc nói với tôi:

Remote branches: 
    develop tracked 
    master tracked 
    team/h2 tracked 
    team/hp1 tracked 
    team/n1 tracked 
Local branches configured for 'git pull': 
    develop merges with remote develop 
    master merges with remote master 
    hp1 merges with remote team/hp1 
Local refs configured for 'git push': 
    master pushes to master (up to date) 

Tôi đã cố gắng

git branch --set-upstream hp1 origin/team/hp1 

git branch --set-upstream hp1 refs/remotes/origin/team/hp1 

nhưng cả hai đều không hoạt động.

Đồng nghiệp của tôi có chi nhánh địa phương được gọi là chi nhánh từ xa (nhóm/hp1) và mã bên trên hoạt động cho anh ấy. Cuối cùng, anh ta nhận được thêm

Local refs configured for 'git push': 
    develop pushes to develop (up to date) 
    master pushes to master (up to date) 
    team/hp1 pushes to team/hp1 (up to date) 

Vì vậy, có thể bạn có thể cho tôi biết điều gì sai và cách khắc phục.

EDIT cấu hình của tôi:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = ***@***:***.git 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
[branch "hp1"] 
    remote = origin 
    merge = refs/heads/team/hp1 

Trả lời

40

Trước tất cả các , Khi đẩy cho lần đầu tiên, làm:

git push -u origin hp1:team/hp1 

Về tùy chọn -u:

-u
--set-thượng nguồn

Đối với mỗi chi nhánh đó là cập nhật hoặc đã đẩy thành công, thêm tham chiếu ngược dòng (theo dõi), được sử dụng bởi lệnh git-pull ít hơn đối số (1) và các lệnh khác. Để biết thêm thông tin, hãy xem branch..merge trong git-config (1).

Lưu ý từ hướng dẫn, điều này tự nó sẽ không xác định điều gì sẽ xảy ra khi bạn thực hiện git push lần sau. Khi bạn làm git pull trong khi ở nhánh này, nó sẽ tìm nạp nó từ thượng lưu mà bạn đã thiết lập. Nhưng khi bạn đẩy, nó sẽ đẩy đến một nhánh phù hợp (trong trường hợp này là hp1 và không phải đội/hp1)

Để làm việc, bạn phải đặt giá trị cấu hình push.default thành upstream.Khi bạn thiết lập rằng, khi bạn đẩy từ một chi nhánh (chỉ làm git push), nó sẽ đẩy về phía thượng lưu như đã đề cập bởi branch.<name>.merge

Vậy làm:

git config push.default upstream 

Về push.default:

push.default

Xác định hành động git push nên thực hiện nếu không có refspec được cung cấp trên dòng lệnh , không có refspec được định cấu hình trong điều khiển từ xa, nd no refspec được ngụ ý bởi bất kỳ tùy chọn nào được đưa ra trên dòng lệnh. Giá trị có thể là:

không có gì - không được đẩy bất kỳ thứ gì.

khớp - đẩy tất cả các nhánh phù hợp. Tất cả các chi nhánh có cùng tên ở cả hai đầu đều được coi là phù hợp. Đây là mặc định.

ngược dòng - đẩy chi nhánh hiện tại lên nhánh ngược dòng.

theo dõi - từ đồng nghĩa không dùng nữa cho thượng nguồn.

hiện tại - đẩy chi nhánh hiện tại vào chi nhánh cùng tên.

+0

thx, giải thích tuyệt vời! Ngoài ra, tôi hiểu bây giờ, tại sao nó hoạt động cho đồng nghiệp của tôi mà không thiết lập push.default – m1schka

+0

Giá trị khác cho push.default là đơn giản - như ngược dòng, nhưng từ chối đẩy nếu tên của nhánh thượng nguồn khác với tên của địa phương. – CodeKid

2

Sử dụng -u tùy chọn để git push:

$ git push -u origin hp1:team/hp1 

Sau đó, sau đó, bạn có thể làm:

$ git push 
+0

mẹo tuyệt vời! cám ơn!! –

+2

cho tôi, nó chỉ thay đổi cấu hình cho 'git pull', cấu hình' git push' vẫn giống nhau (không có mục tiêu đẩy cho chi nhánh hp1) – m1schka

+0

Bạn có thể đăng tập tin cấu hình của mình không? – mipadi

3

(Tháng Ba 2012): Hãy coi chừng: rằng chính sách "ngược dòng" có thể trở thành một trong những mặc định sớm
(đôi khi sau git1.7.10 +)
:

Xem "Please discuss: what "git push" should do when you do not say what to push?"

Trong cài đặt hiện tại (ví dụ: push.default=matching), git push witho đối số ut sẽ đẩy tất cả các nhánh tồn tại cục bộ và từ xa với cùng tên.
Điều này thường thích hợp khi nhà phát triển đẩy vào kho lưu trữ công cộng của riêng mình, nhưng có thể gây nhầm lẫn nếu không nguy hiểm khi sử dụng kho lưu trữ được chia sẻ.

Đề xuất là thay đổi mặc định thành 'upstream', tức là chỉ đẩy chi nhánh hiện tại và đẩy nhánh đó vào nhánh git kéo sẽ kéo.
Một ứng cử viên khác là 'current'; điều này chỉ đẩy nhánh hiện tại đến nhánh từ xa cùng tên.

gì đã được thảo luận cho đến nay có thể được nhìn thấy trong luồng này:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

trước các cuộc thảo luận liên quan bao gồm:

Để tham gia thảo luận, gửi tin nhắn đến: [email protected]

+0

git 2.0 sẽ thay đổi hành vi mặc định cho git push, nhưng chỉ với chế độ "đơn giản" mà tôi không nghĩ sẽ làm những gì bạn muốn. Xem https://www.kernel.org/pub/software/scm/git/docs/git-config.html –

+0

@AlexanderBird Có, bạn nói đúng. Tôi đã ghi nhận rằng: http://stackoverflow.com/a/10002469/6309, http://stackoverflow.com/a/13751847/6309. – VonC

0

Sau đây sẽ cho phép người ta không phải chỉ định -u ${branch_name} cho git push đầu tiên.

git config "branch.${branch_name}.remote" origin 
git config "branch.${branch_name}.merge" "refs/heads/${branch_name}" 

Cấp, nhập nhiều hơn nhưng không phải khi nó nằm trong tập lệnh thiết lập không gian làm việc của một người. Nó cũng không đẩy nhanh chi nhánh vào repo từ xa.

Các vấn đề liên quan