Làm thế nào để thay đổi từ xa một chi nhánh đang theo dõi?


670

Các centralkho lưu trữ phải được thiết lập trên một máy chủ mới, vì vậy tôi đã tạo ra một từ xa mới về repo địa phương của tôi, và đẩy vào đó.

Nhưng bây giờ khi tôi làm git pull, nó tuyên bố tôi cập nhật. Nó sai rồi, nó nói với tôi về nhánh từ xa , không phải cái mới, mà tôi biết thực tế có những cam kết mới để tìm nạp.

Làm cách nào để thay đổi chi nhánh địa phương của tôi để theo dõi một điều khiển từ xa khác?

Tôi có thể thấy điều này trong tệp cấu hình git nhưng tôi không muốn làm mọi thứ rối tung lên.

[branch "master"]
    remote = oldserver
    merge = refs/heads/master

1
Tôi đã điều chỉnh tiêu đề của bạn - bạn thực sự đang cố gắng thay đổi điều khiển từ xa mà bạn đang theo dõi, nhưng vẫn theo dõi cùng tên chi nhánh trong đó.
Cascabel


5
Thật khó để coi đây là một bản sao của Làm thế nào để bạn tạo một nhánh Git hiện có theo dõi một nhánh từ xa? . Câu hỏi đó không xác định rằng chi nhánh đã theo dõi một chi nhánh từ xa. Cái này nào.

1
đối với tôi có vẻ như chỉnh sửa tập tin cấu hình là cách dễ nhất an toàn nhất để thực hiện điều này
Steven Lu

Câu trả lời:


1077

Sử dụng git v1.8.0 trở lên:

git branch branch_name --set-upstream-to your_new_remote/branch_name

Hoặc bạn có thể sử dụng công -utắc:

git branch branch_name -u your_new_remote/branch_name

Sử dụng git v1.7.12 trở về trước:

git branch --set-upstream branch_name your_new_remote/branch_name


2
Đây là những gì tôi đang tìm kiếm - đã thay đổi nhánh theo dõi từ xa cho nhánh đã cho. Cảm ơn!
joachim

7
Ah, xấu của tôi. Tôi vẫn sẽ làm điều đó thông qua cấu hình, bởi vì bạn có thể chắc chắn không vô tình thay đổi tên chi nhánh, nhưng tất cả đều tốt. +1.
Cascabel

Từ ghi chú phát hành 1.8.0 : "Thật hấp dẫn khi nói" git nhánh --set-upstream origin / master ", nhưng điều đó nói với Git để sắp xếp" origin / master "của nhánh cục bộ để tích hợp với nhánh hiện đang được kiểm tra, điều này rất khó xảy ra với ý nghĩa của người dùng. Tùy chọn này không được chấp nhận; thay vào đó, hãy sử dụng tùy chọn "--set-upstream-to" (với tùy chọn "-u" ngắn và ngọt ngào. "
Jared Beck

Thật sạch sẽ; _; Tôi có thể sửa chữa mớ hỗn độn nhỏ mà tôi tạo ra rất dễ dàng! Cảm ơn bạn =))
Aditya MP

56
Nếu nhánh theo dõi từ xa chưa tồn tại nhưng một nhánh theo dõi từ xa hiện tại đang được theo dõi, nó không thể được thay đổi thành nhánh theo dõi từ xa mới tồn tại. Bạn cần bỏ đặt nhánh theo dõi từ xa hiện tại trước: git branch --unset-upstream- sau đó nó hoạt động như được đưa ra trong câu trả lời này (hoặc với câu tiếp theo git push -u / --set-upstream).
hakre

87

Đối với tôi, bản sửa lỗi là:

git remote set-url origin https://some_url/some_repo

Sau đó:

git push

3
Đây là cách Github nói để làm điều đó. help.github.com/articles/changing-a-remote-s-url
fsharp

18
Điều này thực sự thay đổi nơi điều khiển từ xa, nó không thay đổi từ xa mà bạn đang theo dõi (về mặt kỹ thuật) - bạn vẫn đang theo dõi "nguồn gốc", nó chỉ cập nhật định nghĩa về nguồn gốc. Đối với một số trường hợp sử dụng, đây có thể là một điều xấu. Giả sử bạn rẽ nhánh jQuery và tạo một điều khiển từ xa mới. "origin" là ngã ba của bạn, "ngược dòng" là jQuery. Sau đó, giả sử bạn cần tạm thời theo dõi repo ban đầu thay vì ngã ba của bạn. Nếu bạn sử dụng set-urlvà quên để thiết lập nó trở lại, sau đó tương lai git pushlệnh sẽ thất bại
stevendesu

42

Với một git cập nhật (2.5.5) , lệnh như sau:

git branch --set-upstream-to=origin/branch

Điều này sẽ cập nhật chi nhánh được theo dõi từ xa cho chi nhánh địa phương hiện tại của bạn


3
Đánh git branch --set-upstream-to=origin/developlên lỗi : error: the requested upstream branch 'origin/develop' does not exist. Trước đây, tôi đã đổi tên một chi nhánh từ xa thành delelop.
belgoros

1
@ Belgoros git fetch --allcó lẽ?
Gabriel Devillers

25

Một tùy chọn khác để có nhiều quyền kiểm soát đối với những gì đang xảy ra là chỉnh sửa cấu hình của bạn bằng tay:

git config --edit

hoặc tốc ký

git config -e

Sau đó chỉnh sửa tệp theo ý muốn, lưu và sửa đổi của bạn sẽ được áp dụng.


1
Điều này tiết kiệm trong ngày cho tôi. Cảm ơn!
Martyn Chamberlin

Vấn đề của tôi là có hai nguồn gốc. (nguồn gốc và nguồn gốc-algo). Nhưng chủ địa phương đã theo dõi "nguồn gốc algo". Nhưng tôi muốn nó theo dõi "nguồn gốc". Cách duy nhất tôi có thể thay đổi đó là chỉnh sửa cấu hình git.
Aswin Prasad

19

Nếu bạn tỉnh táo về nó, chỉnh sửa tệp cấu hình là đủ an toàn. Nếu bạn muốn hoang tưởng hơn một chút, bạn có thể sử dụng lệnh sứ để sửa đổi nó:

git config branch.master.remote newserver

Tất nhiên, nếu bạn nhìn vào cấu hình trước và sau, bạn sẽ thấy rằng nó đã làm chính xác những gì bạn sẽ làm.

Nhưng trong trường hợp cá nhân của bạn, những gì tôi sẽ làm là:

git remote rename origin old-origin
git remote rename new-origin origin

Đó là, nếu máy chủ mới sẽ là điều khiển từ xa chuẩn, tại sao không gọi nó là nguồn gốc như thể ban đầu bạn được nhân bản từ nó?


3
Tôi thực sự đã làm điều đó trước khi khắc phục sự cố này - git rất thông minh và thực hiện việc đổi tên từ xa sang tệp cấu hình, vì vậy, trong ví dụ của bạn, tệp cấu hình của tôi đã nói 'nguồn gốc cũ'.
joachim

Cá nhân, tôi nghĩ rằng cách này có ý nghĩa hơn về mặt khái niệm so với cách được chấp nhận, nhưng tôi đoán chúng là tương đương về chức năng, đúng không?
Evan Donovan

1
@Jefromi: A remote renamesẽ không làm những gì đang được yêu cầu vì nó thay đổi tên của điều khiển từ xa cả trong cấu hình [remote]và trong cấu hình [branch]. Vì vậy, những gì người ta cần làm trong trường hợp này là chỉnh sửa tệp cấu hình và thực hiện những gì bạn đang nói (đổi tên từ xa) chỉ tại các [remote]dòng cấu hình.
Sumeet Pareek

7
git fetch origin
git checkout --track -b local_branch_name origin/branch_name

hoặc là

git fetch
git checkout -b local_branch_name origin/branch_name

Đối với trường hợp của tôi, tôi cần git fetch. Tôi đã tạo một nhánh mới trong bitbucket và muốn chuyển sang nó. git không biết về những thay đổi từ xa nên tôi phải làm git fetchtrước đây git checkout feature/new-feature-branch. Hy vọng điều này sẽ giúp người khác.
TelamonAegisthus

6

Đây là lệnh dễ nhất:

git push --set-upstream <new-origin> <branch-to-track>

Ví dụ, đưa ra lệnh git remote -vtạo ra một cái gì đó như:

origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (fetch)
origin  ssh://git@bitbucket.some.corp/~myself/projectr.git (push)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (fetch)
team    ssh://git@bitbucket.some.corp/vbs/projectr.git (push)

Để thay đổi để theo dõi đội thay thế:

git push --set-upstream team master

Chi nhánh để theo dõi là tùy chọn khi không có gì mơ hồ. Tôi đã sử dụng đề xuất của bạn khi di chuyển khỏi Github;) Cảm ơn bạn.
gouliej

4

Bạn có thể xóa chi nhánh hiện tại của mình và làm:

git branch --track local_branch remote_branch

Hoặc thay đổi thay đổi máy chủ từ xa thành máy chủ hiện tại trong cấu hình


không làm việc cho tôi, chỉ có lệnh làm việc là từ @uma: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid

2

Dựa trên những gì tôi hiểu từ tài liệu git mới nhất , tóm tắt là:

git branch -u upstream-branch local-branch
git branch --set-upstream-to=upstream-branch local-branch

Cách sử dụng này có vẻ hơi khác so với câu trả lời của urschrei, vì trong bản tóm tắt của ông là:

git branch local-branch -u upstream-branch 
git branch local-branch --set-upstream-to=upstream-branch 

Tôi đoán họ đã thay đổi tài liệu một lần nữa?


1

Trong phiên bản git mới nhất như 2.7.4 ,

git checkout branch_name #branch tên mà bạn muốn thay đổi chi nhánh theo dõi

git branch --set-upstream-to=upstream/tracking_branch_name #upstream - tên từ xa


1

Tôi thấy bài đăng của @critikaster hữu ích, ngoại trừ việc tôi phải thực hiện các lệnh này với GIT 2.21:

$ git remote set-url origin https://some_url/some_repo
$ git push --set-upstream origin master

0

cách dễ nhất là chỉ cần đẩy sang nhánh mới:

git đẩy -u nguồn gốc chi nhánh / tên

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.