วิธีการเปลี่ยนรีโมตที่สาขากำลังติดตามอยู่


674

ที่centralเก็บต้องตั้งค่าบนเซิร์ฟเวอร์ใหม่ดังนั้นฉันจึงสร้างรีโมตใหม่บน repo ในพื้นที่ของฉันและผลักไปที่นั้น

แต่ตอนนี้เมื่อฉันทำgit pullมันก็อ้างว่าฉันทันสมัย มันผิด - มันบอกฉันเกี่ยวกับสาขาระยะไกลเก่าไม่ใช่สาขาใหม่ซึ่งฉันรู้ว่ามีความมุ่งมั่นที่จะดึงข้อมูลใหม่

ฉันจะเปลี่ยนสาขาในพื้นที่ของฉันเพื่อติดตามรีโมตอื่นได้อย่างไร

ฉันเห็นสิ่งนี้ในไฟล์ git config แต่ฉันไม่ต้องการทำสิ่งที่ยุ่ง

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

1
ฉัน tweaked ชื่อของคุณ - คุณกำลังพยายามเปลี่ยนระยะไกลที่คุณกำลังติดตาม แต่ยังคงติดตามชื่อสาขาเดียวกันในนั้น
Cascabel


5
เป็นการยากที่จะพิจารณาสิ่งนี้ซ้ำซ้อนของคุณจะทำให้สาขา Git ที่มีอยู่ติดตามสาขาระยะไกลได้อย่างไร . คำถามนั้นไม่ได้ระบุว่าสาขากำลังติดตามสาขาระยะไกลอยู่แล้ว อันนี้ทำ

1
ดูเหมือนว่าผมชอบการแก้ไขไฟล์ config เป็นที่ง่ายที่สุดและวิธีที่ปลอดภัยที่สุดที่จะไปเกี่ยวกับเรื่องนี้
สตีเว่น Lu

คำตอบ:


1080

ใช้git v1.8.0หรือใหม่กว่า:

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

หรือคุณสามารถใช้-uสวิตช์:

git branch branch_name -u your_new_remote/branch_name

ใช้ git v1.7.12หรือเร็วกว่า:

git branch --set-upstream branch_name your_new_remote/branch_name


2
นี่คือสิ่งที่ฉันกำลังมองหา - เปลี่ยนสาขาการติดตามระยะไกลสำหรับสาขาที่กำหนด ขอบคุณ!
joachim

7
โอ้ฉันไม่ดี ฉันจะยังคงทำมันผ่านการตั้งค่าเพราะคุณสามารถแน่ใจได้ว่าจะไม่เปลี่ยนชื่อสาขา แต่บังเอิญทั้งหมด +1
Cascabel

จากบันทึกประจำรุ่น 1.8.0 : "มันเป็นเรื่องดึงดูดที่จะพูดว่า" git branch --set-upstream origin / master "แต่นั่นบอกให้ Git จัดการกับ" origin / master "ในสาขาท้องถิ่นเพื่อรวมเข้ากับสาขาที่เช็คเอาท์ในปัจจุบัน ซึ่งไม่น่าเป็นไปได้อย่างที่ผู้ใช้หมายถึงตัวเลือกเลิกใช้ใช้ตัวเลือก "--set-upstream-to-" ใหม่ (พร้อมตัวเลือกสั้นและหวาน "-u") แทน "
Jared Beck

สะอาดมาก _; ฉันสามารถแก้ไขสิ่งเล็กน้อยที่ฉันสร้างได้อย่างง่ายดาย! ขอขอบคุณ =))
Aditya MP

56
หากสาขาการติดตามระยะไกลยังไม่มีอยู่ แต่สาขาการติดตามระยะไกลที่มีอยู่ในปัจจุบันมีการติดตามจะไม่สามารถเปลี่ยนเป็นสาขาการติดตามระยะไกลใหม่ที่ไม่มีอยู่ คุณต้องยกเลิกการตั้งค่าสาขาการติดตามระยะไกลปัจจุบันก่อน: git branch --unset-upstream- จากนั้นจะทำงานตามที่กำหนดในคำตอบนี้ (หรือกับถัดไปgit push -u / --set-upstream)
hakre

88

สำหรับฉันการแก้ไขคือ:

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

แล้ว:

git push

3
นี่คือวิธีที่ Github บอกให้ทำ help.github.com/articles/changing-a-remote-s-url
fsharp

18
นี่เป็นการเปลี่ยนแปลงที่รีโมตอยู่ซึ่งจะไม่เปลี่ยนรีโมตใดที่คุณกำลังติดตาม (ทางเทคนิค) - คุณยังคงติดตาม "จุดกำเนิด" แต่เพียงแค่อัปเดตนิยามแหล่งกำเนิด สำหรับบางกรณีการใช้งานอาจเป็นสิ่งที่ไม่ดี สมมติว่าคุณแยก jQuery และสร้างรีโมตใหม่ "origin" เป็นทางแยกของคุณ "upstream" คือ jQuery จากนั้นสมมติว่าคุณจำเป็นต้องติดตาม repo เดิมแทนส้อมของคุณ หากคุณใช้set-urlและลืมที่จะตั้งกลับgit pushคำสั่งในอนาคตจะล้มเหลว
4252

42

ด้วยgitที่ทันสมัย(2.5.5)คำสั่งจะเป็นดังนี้:

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

การดำเนินการนี้จะอัปเดตสาขาติดตามระยะไกลสำหรับสาขาท้องถิ่นปัจจุบันของคุณ


3
การกดปุ่มgit branch --set-upstream-to=origin/developเพิ่มข้อผิดพลาด: error: the requested upstream branch 'origin/develop' does not exist. ก่อนหน้านี้ฉันเปลี่ยนชื่อสาขาระยะไกลเพื่อพัฒนา
belgoros

1
@ Belgoros git fetch --allอาจจะ?
Gabriel Devillers

25

ตัวเลือกอื่นเพื่อให้สามารถควบคุมสิ่งที่เกิดขึ้นได้มากมายคือแก้ไขการกำหนดค่าด้วยตนเอง

git config --edit

หรือชวเลข

git config -e

จากนั้นแก้ไขไฟล์ตามที่ต้องการบันทึกและการแก้ไขของคุณจะถูกนำไปใช้


1
สิ่งนี้ช่วยวันให้ฉันได้ ขอบคุณ!
Martyn Chamberlin

ปัญหาของฉันคือว่ามีสองต้นกำเนิด (ต้นกำเนิดและต้นกำเนิด - อัลโก) แต่ผู้เชี่ยวชาญในพื้นที่กำลังติดตาม "Origin-algo" แต่ฉันต้องการให้มันติดตาม "ที่มา" วิธีเดียวที่ฉันสามารถเปลี่ยนได้คือแก้ไขการตั้งค่า git
อัศวินปราสาท

19

หากคุณมีสติเกี่ยวกับเรื่องนี้ให้แก้ไขไฟล์กำหนดค่าให้ปลอดภัยพอ หากคุณต้องการหวาดระแวงมากกว่านี้คุณสามารถใช้คำสั่ง Porcelain เพื่อแก้ไข:

git config branch.master.remote newserver

แน่นอนถ้าคุณดูการกำหนดค่าก่อนและหลังคุณจะเห็นว่ามันทำในสิ่งที่คุณกำลังจะทำ

แต่ในกรณีของคุณสิ่งที่ฉันจะทำคือ:

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

นั่นคือถ้าเซิร์ฟเวอร์ใหม่จะเป็นรีโมทแบบบัญญัติทำไมไม่เรียกมันว่ากำเนิดขึ้นมาเหมือนกับว่าคุณได้ทำการโคลนมาตั้งแต่แรก


3
จริง ๆ แล้วฉันได้ทำแล้วก่อนที่จะเข้ารหัสปัญหานี้ - คอมไพล์ฉลาดและดำเนินการเปลี่ยนชื่อจากระยะไกลผ่านไปยังไฟล์กำหนดค่าดังนั้นในตัวอย่างของคุณไฟล์ปรับแต่งของฉันพูดว่า 'เก่า - ต้นกำเนิด'
joachim

โดยส่วนตัวแล้วฉันคิดว่าวิธีนี้เหมาะสมกว่าแนวความคิดที่ยอมรับได้ แต่ฉันคิดว่ามันเทียบเท่ากับการใช้งานจริงใช่ไหม?
Evan Donovan

1
@Jefromi: A remote renameจะไม่ทำสิ่งที่ถูกถามเพราะจะเปลี่ยนชื่อของรีโมททั้งใน[remote]configs และ[branch]configs ดังนั้นสิ่งที่เราต้องทำในกรณีนี้คือการแก้ไขไฟล์ปรับแต่งและทำในสิ่งที่คุณพูด (เปลี่ยนชื่อรีโมต) ที่[remote]บรรทัดปรับแต่ง
Sumeet Pareek

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

หรือ

git fetch
git checkout -b local_branch_name origin/branch_name

git fetchสำหรับกรณีของฉันที่ฉันต้องการ ฉันได้สร้างสาขาใหม่ใน bitbucket และต้องการเปลี่ยนไปใช้ คอมไพล์ไม่ทราบเกี่ยวกับการเปลี่ยนแปลงระยะไกลดังนั้นผมต้องทำก่อนgit fetch git checkout feature/new-feature-branchหวังว่านี่จะช่วยคนอื่นได้
TelamonAegisthus

6

นี่คือคำสั่งที่ง่ายที่สุด:

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

ตัวอย่างเช่นให้คำสั่งgit remote -vผลิตสิ่งที่ต้องการ:

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)

หากต้องการเปลี่ยนเป็นการติดตามทีมแทน:

git push --set-upstream team master

สาขาที่จะติดตามเป็นตัวเลือกเมื่อไม่มีอะไรคลุมเครือ ฉันใช้คำแนะนำของคุณเมื่อย้ายจาก Github;) ขอบคุณ
gouessej

4

คุณสามารถลบสาขาปัจจุบันของคุณและทำ:

git branch --track local_branch remote_branch

หรือเปลี่ยนเปลี่ยนเซิร์ฟเวอร์ระยะไกลเป็นปัจจุบันในการกำหนดค่า


ไม่ทำงานสำหรับฉันเฉพาะคำสั่งที่ใช้งานได้มาจาก @uma: git checkout --track -b local_branch_name origin/branch_name
Saad Benbouzid

2

จากสิ่งที่ฉันเข้าใจจากเอกสาร git ล่าสุดสรุปคือ:

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

การใช้งานนี้ดูเหมือนจะแตกต่างจากคำตอบของ urschrei เล็กน้อยในบทสรุปของเขาคือ:

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

ฉันเดาว่าพวกเขาเปลี่ยนเอกสารอีกครั้ง?


1

ในรุ่นคอมไพล์ใหม่ล่าสุดเช่น2.7.4 ,

git checkout branch_name #branch ชื่อที่คุณต้องการเปลี่ยนสาขาการติดตาม

git branch --set-upstream-to=upstream/tracking_branch_name #upstream - ชื่อระยะไกล


1

ฉันพบว่าการโพสต์ของ@critikasterมีประโยชน์ยกเว้นว่าฉันต้องทำตามคำสั่งเหล่านี้ด้วย GIT 2.21:

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

0

วิธีที่ง่ายที่สุดคือกดไปที่สาขาใหม่:

git push -u กำเนิดสาขา / ชื่อ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.