git push đến chi nhánh cụ thể


101

Ngay cả sau khi đọc câu hỏi này: git-push-current-branch , tôi vẫn gặp khó khăn trong việc tìm ra cách tôi nên viết lệnh git push của mình. Như đã đề cập trong liên kết câu hỏi, nó không rõ ràng từ tài liệu.

Tôi muốn sử dụng ví dụ về 'thế giới thực' của mình. Sau đây là những gì tôi thấy khi thực hiện một git statuslệnh ở cấp cao nhất trong nhánh của mình:

Trên nhánh amd_qlp_tester

Chi nhánh của bạn đi trước 'origin / amd_qlp_tester' 5 lần cam kết.

Vân vân...

Vì vậy, tên chi nhánh của tôi là amd_qlp_testernhưng nó đã được "phân nhánh" khỏi chi nhánh chính (nếu tôi có điều khoản sai thì đó là do nền tảng SVN của tôi). Nhưng sau đó cũng có tên là origin / amd_qlp_testser

Vậy làm cách nào để diễn đạt lệnh push của tôi?

Đó có phải là bất kỳ điều nào sau đây không:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push

Câu trả lời:


92

git push origin amd_qlp_testersẽ làm việc cho bạn. Nếu bạn chỉ nhập git push, thì điều khiển từ xa của nhánh hiện tại là giá trị mặc định.

Cú pháp của push có dạng như sau - git push <remote> <branch>. Nếu bạn nhìn vào điều khiển từ xa của mình trong .git/configtệp, bạn sẽ thấy một mục nhập [remote "origin"]chỉ định url của kho lưu trữ. Vì vậy, trong phần đầu tiên của lệnh, bạn sẽ cho Git biết nơi tìm kho lưu trữ cho dự án này và sau đó bạn chỉ định một nhánh.


Cám ơn :) đó, bạn có thể giải thích lý do tại sao họ là hai riêng biệt "từ" khi tình trạng dit mô tả màn hình nó như một con đường, tức là tại sao nó origin amd_qlp_testservà khôngorigin/amd_qlp_tester
code_fodder

"Điều khiển từ xa" mặc định dựa trên cấu hình của nhánh hiện tại (trong trường hợp này thực sự là như vậy origin). (Các) nhánh để đẩy giá trị mặc định (trong các phiên bản hiện tại của git) về :nếu không được đặt, có nghĩa là matching, nhưng điều đó sẽ thay đổi trong tương lai.
torek

Tôi hơi bối rối, tôi đang sử dụng v2.10, khi tôi gõ git pushnó cố gắng đẩy tất cả các nhánh được theo dõi, trái với những gì bạn nói ("điều khiển từ xa của nhánh hiện tại là giá trị mặc định").
Roberto

Git 2.x nên sử dụng simplechiến lược đẩy có nghĩa là sẽ chỉ đẩy nhánh hiện tại. blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik

fatal: Couldn't find remote ref branch-name-here
doug65536

111

Nếu chi nhánh cục bộ và chi nhánh từ xa của bạn trùng tên thì bạn chỉ cần thực hiện:

git push origin branchName

Khi tên chi nhánh cục bộ và từ xa của bạn khác nhau thì bạn chỉ cần thực hiện:

git push origin localBranchName:remoteBranchName

8

Các câu trả lời trong câu hỏi mà bạn đã liên kết đến đều là về cấu hình git để bạn có thể nhập git pushcác lệnh rất ngắn và yêu cầu chúng làm bất cứ điều gì bạn muốn. Thật tuyệt, nếu bạn biết mình muốn gì và đánh vần điều đó trong Git-Ese, nhưng bạn chưa quen với git! :-)

Trong trường hợp của bạn, câu trả lời của Petr Mensik là (tốt, "a") đúng. Đây là lý do tại sao:

Lệnh bắt nguồn xung quanh tệp của bạn để tìm "điều khiển từ xa" được đặt tên (ví dụ :). Tệp cấu hình liệt kê:git push remote.git/configorigin

  • nơi (theo URL) từ xa đó "sống" (ví dụ :)ssh://hostname/path
  • đẩy đi đâu, nếu khác
  • cái gì được đẩy, nếu bạn không nói (các) nhánh cần đẩy
  • những gì được tìm nạp khi bạn chạy git fetch remote

Khi bạn lần đầu tiên sao chép repo — bất cứ khi nào — git thiết lập các giá trị mặc định cho một số trong số này. URL là bất cứ thứ gì bạn sao chép từ đó và phần còn lại, nếu được đặt hoặc không được đặt, tất cả đều là mặc định "hợp lý" ... hoặc, hmm, phải không?

Vấn đề với những điều này là mọi người đã thay đổi suy nghĩ của họ, theo thời gian, về điều gì là "hợp lý". Vì vậy, bây giờ (tùy thuộc vào phiên bản git của bạn và liệu bạn đã định cấu hình mọi thứ chi tiết hay chưa), git có thể in ra nhiều cảnh báo về việc thay đổi mặc định trong tương lai. Thêm tên của "nhánh cần đẩy" - amd_qlp_tester- (1) sẽ tắt nó và (2) chỉ đẩy một nhánh đó.

Nếu bạn muốn đẩy thuận tiện hơn, bạn có thể làm điều đó với:

git push origin

hoặc thậm chí:

git push

nhưng điều đó có làm được những gì bạn muốn hay không, tùy thuộc vào việc bạn đồng ý với "tác giả git ban đầu" rằng giá trị mặc định ban đầu là hợp lý hay "tác giả git sau này" rằng giá trị mặc định ban đầu không hợp lý. Vì vậy, khi bạn muốn thực hiện tất cả nội dung cấu hình (cuối cùng), hãy xem câu hỏi (và câu trả lời) mà bạn đã liên kết đến.

Đối với tên origin/amd_qlp_testerở nơi đầu tiên: đó thực sự là một thực thể cục bộ (tên được lưu trong kho của bạn), mặc dù nó được gọi là "chi nhánh từ xa". Đó là dự đoán tốt nhất của git tại "nơi ở amd_qlp_testerđằng kia". Git cập nhật nó khi nó có thể .


1
Cảm ơn vì lời giải thích, tôi nghĩ bây giờ tôi đã rõ ràng. Tôi thích được chính xác vì vậy tôi sẽ dính vào git push origin amd_qlp_testercho đến khi tôi có nhu cầu làm công cụ tiên tiến hơn :)
code_fodder

2

Tôi muốn thêm một câu trả lời được cập nhật - hiện tại tôi đã sử dụng git được một thời gian, tôi thấy rằng tôi thường sử dụng các lệnh sau để thực hiện bất kỳ lần đẩy nào (sử dụng câu hỏi gốc làm ví dụ):

  • git push origin amd_qlp_tester- Đẩy đến chi nhánh nằm ở xa được gọi origintrên chi nhánh từ xa được gọi amd_qlp_tester.
  • git push -u origin amd_qlp_tester- giống như lần trước, nhưng đặt ngược dòng liên kết nhánh cục bộ với nhánh từ xa để lần sau bạn có thể sử dụng git push/pullnếu chưa liên kết (chỉ cần thực hiện một lần).
  • git push - Khi bạn đã thiết lập ngược dòng, bạn chỉ có thể sử dụng phiên bản ngắn hơn này.

-uTùy chọn ghi chú là phiên bản ngắn của --set-upstream- chúng giống nhau.

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.