Làm cách nào để đặt lại 'master' thành 'origin / master'?


216

Tôi có thể làm như sau một cách đơn giản hơn không?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Đôi khi, điều này có thể được thực hiện mà không cần chạm vào cây làm việc: stackoverflow.com/a/12343727/586086
Andrew Mao

6
Vui lòng cập nhật câu trả lời được chấp nhận của bạn: Câu trả lời của @ KindDragon chính xác và ngắn gọn hơn.
Robert Siemer

Câu trả lời:


310

Như câu trả lời của KindDragon , bạn có thể tạo lại trực tiếp tại :masterorigin/master

git checkout -B master origin/master

Các git checkouttrang người đàn ông đề cập đến:

Nếu -Bđược đưa ra, <new_branch>được tạo ra nếu nó không tồn tại; mặt khác, nó được thiết lập lại . Đây là giao dịch tương đương với

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Ban đầu đề nghị:

Cái gì đó như:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

với bước 2 là tùy chọn.


1
Bạn có thể làm điều đó với một dòng.
Robert Siemer

94

Git hỗ trợ lệnh này:

git checkout -B master origin/master

Kiểm tra origin/masterchi nhánh và sau đó thiết lập lại masterchi nhánh ở đó.


4
Câu trả lời đúng duy nhất.
Robert Siemer

3
lưu bốn tổ hợp phím - bạn không cần dấu ngoặc kép. Chỉ cần: git checkout -B master origin / master
zumalifeguard

Hãy nói rằng tôi đã cam kết 2 điều, điều đầu tiên là hợp nhất với chi nhánh và điều thứ hai là thường xuyên. Điều gì xảy ra với sự hợp nhất nếu tôi quay trở lại nguồn gốc / chủ?
utdev

1
bạn không phải git fetch origin mastertrước khi chắc chắn origin/masterđược cập nhật?
pedrozath

Vâng, tất nhiên với tất cả các giải pháp bạn nên làm git fetchtrước tiên
KindDragon

29

Tôi nghĩ ngay cả câu trả lời của VonC cũng có độ phức tạp so với tùy chọn này:

git update-ref refs/heads/master origin/master
git reset --hard master

git tự động ghi lại mọi giá trị của một ref (thông qua reflog). Vì vậy, sau khi bạn chạy lệnh đó, sau đó master@{1}đề cập đến giá trị trước đó của master.

Câu trả lời của VonC là chính xác, nhưng nó lãng phí thời gian kiểm tra giá trị cũ của chủ vào hệ thống tập tin.

Nếu bạn quan tâm đến các đối tượng mồ côi trong repo, thì bạn có thể chạy git gc


1
Âm thanh thay thế thú vị. +1
VonC

Tôi vẫn nhận đượcAlready on 'master'
yourfriendzak

@yourfriendzak, tôi quên mất việc tính đến việc bạn có thể đã kiểm tra tổng thể trước khi cập nhật chủ. Tôi đã cập nhật câu trả lời là một câu hỏi nên hoạt động ngay cả trong trường hợp đó.
Alexander Bird

Điều này hoạt động ngay cả khi bạn không ở chế độ chính (như trạng thái CHÍNH tách rời đang thực sự trỏ đến gốc / đầu tip). Sau đó, bạn có thể kiểm tra tổng thể mà không cần phải lật các tập tin cũ thông qua repo. Tuyệt quá!
Andrew Mao

20

Nếu bạn đã sẵn sàng, masterbạn có thể làm như sau:

git reset --hard origin/master

Nó sẽ trỏ masternhánh cục bộ vào điều khiển từ xa origin/mastervà loại bỏ mọi sửa đổi trong thư mục làm việc.


Và sẽ xóa các tập tin! Nếu bạn đã tạo / chỉnh sửa các tệp và đã chạy "git add" trên chúng, lệnh này sẽ xóa chúng. Được cảnh báo.
Cheeso

Cách tiếp cận này tốt hơn git checkout -B master origin/master?
Jim Aho
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.