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


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

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

151
2018-04-20 10:34


gốc


Đôi khi, điều này có thể được thực hiện mà không cần chạm vào cây đang hoạt động: stackoverflow.com/a/12343727/586086 - Andrew Mao
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 là chính xác và ngắn hơn. - Robert Siemer


Các câu trả lời:


Như KindDragon'S câu trả lời đề cập, bạn có thể tạo lại master trực tiếp tại origin/master với:

git checkout -B master origin/master

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

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

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

Được đề xuất ban đầu:

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.


209
2018-04-20 11:22



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


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

git checkout -B master origin/master

Kiểm tra origin/master nhánh và sau đó đặt lại master chi nhánh ở đó.


69
2017-08-24 19:30



Câu trả lời thực sự duy nhất. - Robert Siemer
lưu bốn lần nhấn phím - bạn không cần dấu ngoặc kép. Chỉ: git checkout -B master origin / master - zumalifeguard
hãy nói rằng tôi đã cam kết 2 điều, thứ đầu tiên là hợp nhất với chi nhánh và thứ hai là thường xuyên. Điều gì sẽ xảy ra với hợp nhất nếu tôi quay lại nguồn gốc / chủ? - utdev
bạn không phải git fetch origin master trước để chắc chắn origin/master đã cập nhật? - pedrozath
Có, tất nhiên với tất cả các giải pháp bạn nên làm git fetch Đầu tiên - KindDragon


Tôi nghĩ ngay cả câu trả lời của VonC cũng phức tạp hơn 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 bản gốc.

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


28
2018-01-23 20:48



Nghe có vẻ thú vị thay thế. +1 - VonC
Tôi vẫn nhận được Already on 'master' - yourfriendzak
@yourfriendzak, tôi quên mất tính đến việc bạn có thể đã kiểm tra chủ trước khi cập nhật chủ. Tôi đã cập nhật câu trả lời là một câu trả lời nên hoạt động ngay cả trong trường hợp đó. - Alexander Bird
Điều này làm việc ngay cả khi bạn không ở trên master (giống như một trạng thái HEAD tách rời thực sự trỏ đến gốc / master gốc). 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


Nếu bạn đã ở master bạn có thể làm như sau:

git reset --hard origin/master

Nó sẽ chỉ địa phương master nhánh từ xa origin/master và loại bỏ bất kỳ sửa đổi nào trong thư mục làm việc.


11
2018-06-25 15:47



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


Bạn đã là người chủ. Bạn muốn xóa nguồn gốc từ xa để git pull không làm gì cả. Vì thế

git remote rm origin

Sau đó bạn có thể thêm kho lưu trữ hiện tại làm nguồn gốc cho kho lưu trữ từ xa nếu bạn cảm thấy thích nó.

NB: Nếu địa phương đi trước điều khiển từ xa, giải pháp của bạn sẽ xóa các thay đổi cục bộ!


-1
2018-01-28 03:04



Câu trả lời này không có ý nghĩa. - ADTC
Điều này là trực tiếp gây hiểu lầm và có thể làm tổn thương dự án mà mọi người đang làm việc. - Wisienkas
Điều này không chính xác. Tôi không chắc tại sao bạn lại có một upvote. - Saher Ahwal