2012-10-21 22 views
26

Tôi chưa bao giờ sử dụng git trước khi GitHub phát hành ứng dụng Windows, vì vậy tôi chưa bao giờ sử dụng nó trong dòng lệnh.Làm cách nào để đẩy nhiều nhánh từ nhiều lần commit?

Vì vậy, đây là tình huống của tôi:
Tôi đã thực hiện một số cam kết trên master, sau đó chuyển nhánh và thực hiện một số cam kết ở đó. Tất cả mà không cần thúc đẩy GitHub. Khi tôi nhấp vào sync trong ứng dụng cửa sổ (mà tôi giả định là git push), tôi ngạc nhiên, tất cả các cam kết của tôi đã được đẩy đến chi nhánh mới của tôi - ngay cả những cam kết tôi đã thực hiện khi tôi ở trong master.

Vì đây là hành vi của ứng dụng cửa sổ, tôi đoán tôi phải sử dụng dòng lệnh.
Lệnh git push chính xác để đẩy các cam kết đến các nhánh chính xác trên điều khiển từ xa là gì?

Trả lời

47

Để đẩy tất cả các chi nhánh (refs dưới refs/con), sử dụng lệnh sau (trong đó nguồn gốc là từ xa của bạn):

git push origin --all 

Bạn cũng có thể thiết lập push.default để matching trong cấu hình của bạn để đẩy tất cả các nhánh có cùng tên trên cả hai đầu theo mặc định. Ví dụ:

git config --global push.default matching 

Vì Git 2.0 mặc định là simple là tùy chọn an toàn nhất.

7

git push origin sẽ đẩy tất cả các nhánh theo dõi tới điều khiển từ xa theo mặc định.

git push origin my-new-branch sẽ chỉ đẩy chi nhánh mới của bạn.

Tôi không tin rằng có bất cứ điều gì đơn giản hoặc có thể làm vô tình mà sẽ đẩy cam kết từ hai chi nhánh khác nhau lên đến cùng một chi nhánh và thực hiện hợp nhất trên điều khiển từ xa.

Tôi đoán rằng nhánh mới có các cam kết từ chính trong lịch sử của nó. Để xem điều đó có đúng hay không, hãy chạy git log my-new-branch tại địa phương và xem liệu những cam kết đó có trong lịch sử của bạn hay không.

Nếu vậy, khi bạn "chuyển nhánh", bạn có thể tách nhánh master sau các cam kết mới được thực hiện, vì vậy nhánh mới có tất cả các cam kết trong lịch sử, không chỉ những cam kết duy nhất cho nhánh đó.

+1

Tôi không chắc chắn về đề xuất cuối cùng của bạn, tôi muốn nói lệnh chỉ đơn giản là 'git push origin branchOne anotherBranch' – Drealmer

+2

Tôi nghĩ rằng các phiên bản mới hơn của git không đẩy tất cả các nhánh theo dõi: http://stackoverflow.com/ a/13148313/586086 –

4

Câu trả lời trễ nhưng tôi sẽ chia sẻ giải pháp của tôi đã làm việc cho tôi.

Cuối cùng tập tin /foo/.git/config của tôi trông giống như:

[core] 
    ... 

[remote "dev"] 
    url = http://dev.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/dev/* 
[remote "pro"] 
    url = http://pro.foobar.com/foo.git 
    fetch = +refs/heads/*:refs/remotes/pro/* 

[remote "all"] 
    url = http://dev.foobar.com/foo.git 
    url = http://pro.foobar.com/foo.git 

[http] 
    postBuffer = 524288000 

Và lệnh;

git push all --all 

Điểm Uy Tín: Pushing to Multiple Git Repositories Simultaneously

+0

Tại sao bạn có 'url' hai lần trong' [remote "tất cả"] '? – MiniGod

+0

Đó là lỗi đánh máy, được chỉnh sửa. Tnx! –

13

Nếu bạn muốn đẩy một số ngành cụ thể (ví dụ branch1 và branch2), bạn có thể sử dụng:

git push origin branch1 branch2 

Trong Git> = 2.4 này hoạt động có thể được thực hiện nguyên tử (tức là nếu nó không đẩy bất kỳ nhánh nào được chỉ định không có gì sẽ được đẩy):

git push --atomic origin branch1 branch2 
+0

Nó không hoạt động. Nó chỉ chuyển đến branch1 – Adnan

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