88

Tôi đang viết một số kịch bản cho quy trình công việc Git của mình.

Tôi cần đặt lại nhánh khác (hiện tại) về nhánh hiện tại mà không cần thanh toán.

Trước:

 CurrentBranch: commit A
 OtherBranch: commit B

Sau:

 CurrentBranch: commit A
 OtherBranch: commit A

Tương đương với

 $ git checkout otherbranch 
 $ git reset --soft currentbranch
 $ git checkout currentbranch

(Lưu ý --soft: Tôi không muốn ảnh hưởng đến cây làm việc.)

Điều này có thể không?

|
73

Quy trình công việc bạn mô tả không tương đương: khi bạn thực hiện, reset --hardbạn mất tất cả các thay đổi trong cây làm việc (bạn có thể muốn thực hiện nó reset --soft).

Những gì bạn cần là

git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch
|
  • 1

    Man, tôi muốn làm việc này mà không có sự thừa refs/heads/...

    – Bùi Trí Minh 23:09:53 15/04/2013
  • 1

    Một cách đẹp hơn để làm điều này là git push . current:other. Điều này hoạt động mà không có refs/heads(/ cc @elliottcable) và nó cũng ngăn bạn cập nhật chi nhánh đã thanh toán. Lưu ý rằng bạn có thể cần phải vượt qua -f (hoặc sử dụng +current:other) nếu bản cập nhật không phải là chuyển tiếp nhanh.

    – Ngô Hữu Lộc 07:41:42 06/06/2013
  • 1

    @KevinBallard, bạn là một thiên tài!

    – Hùng Ngọc Đào 14:28:42 23/07/2013
  • 1

    Bạn cũng có thể sử dụng -m 'some text'đối số để ghi lại lý do cập nhật ref được hiển thị bằng git reflog OtherBranchlệnh, chẳng hạn như "được đồng bộ hóa với CurrentBranch". Có thể hữu ích để nhớ tại sao bạn làm điều đó sau này.

    – Tạ Vân Phi 21:16:02 11/12/2013
  • 1

    Tại sao bạn sẽ sử dụng git update-ref refs/heads/OtherBranch refs/heads/CurrentBranchhoặc git push . CurrentBranch OtherBranchkhi bạn có thể sử dụng trình dọn dẹp nhiều hơn (IMO) git branch -f OtherBranch CurrentBranchthay thế? (Xem câu trả lời của tôi trên chi nhánh git -f bên dưới)

    – Tạ Cao Phong 16:33:03 09/01/2014
179

Đặt otherbranchđể trỏ đến cùng một cam kết như currentbranchbằng cách chạy

git branch -f otherbranch currentbranch

Các -f(lực lượng) tùy chọn bảo git branch vâng, tôi thực sự có nghĩa là ghi đè lên bất kỳ hiện otherbranchtham khảo với cái mới .

Từ tài liệu :

-f
- lực lượng

Đặt lại nếu đã tồn tại. Không có -f chi nhánh git từ chối thay đổi một chi nhánh hiện có.

|
  • 1

    Đây là câu trả lời dễ nhất. Cảm ơn!

    – Tạ Anh Ðào 17:40:25 26/05/2014
  • 1

    Tôi nhận được fatal: Cannot force update the current branch.khi cố gắng làm điều này.

    – Hoàng Xuân Nam 15:42:20 25/06/2014
  • 1

    @FuadSaud đó là vì bạn đã otherbranchkiểm tra. Câu hỏi SO này đặc biệt về việc đặt lại một chi nhánh khác cho một cam kết khác (nghĩa là không đặt lại chi nhánh đã thanh toán). Những gì bạn muốn làm là thiết lập lại chi nhánh hiện tại git reset targetbranchđể buộc chi nhánh hiện tại được chỉ vào targetbranch. Thêm --hardvào cũng buộc cây công việc vào nội dung đó. Hoặc --softđể chỉ số một mình và chỉ thay đổi chi nhánh chính nó.

    – Ngô Thanh Hoa 19:28:06 25/06/2014
  • 1

    Phải, vì vậy, tôi biết về thiết lập lại. Những gì tôi đang tìm kiếm là một cách để, trong một thói quen, luôn hướng chủ địa phương lên thượng nguồn / chủ, độc lập với những gì đã kiểm tra. Tôi nghĩ branch -fcó thể làm điều đó.

    – Ngô Dung Hạnh 19:32:36 25/06/2014
  • 1

    Imo, đây sẽ là câu trả lời được chấp nhận. Điều này cải thiện quy trình làm việc của tôi rất nhiều!

    – Hoàng Vân Du 08:48:33 09/06/2015
20

Bạn có thể đồng bộ hóa với lệnh này các chi nhánh của bạn bất cứ lúc nào

$ git push . CurrentBranch:OtherBranch -f

Ngoài ra không có -f nó thay thế tập lệnh này

$ git checkout OtherBranch
$ git merge CurrentBranch
$ git checkout CurrentBranch

Nó có thể hữu ích khi bạn không cần phải cam kết tất cả các tệp của mình trong CurrentBranch và vì vậy bạn không thể chuyển sang các chi nhánh khác.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.