Trong v2.24 git switchlà một cái gì đó giống như một cái két sắt git checkout.
Do đó tôi đổi tên bí danh dưới đây để git hopcho
"hop trên cành mà không thay đổi worktree"
Vì lợi ích của người đọc:
Mặc dù tôi nghĩ rằng giải pháp của Charles Bailey là một giải pháp chính xác, nhưng giải pháp này cần một sự điều chỉnh khi chuyển sang một thứ gì đó không phải là nhánh cục bộ. Ngoài ra, cần có một số cách thực hiện với các lệnh thông thường dễ hiểu. Đây là những gì tôi nghĩ ra:
git checkout --detach
git reset --soft commitish
git checkout commitish
Giải thích:
git checkout --detachcũng giống như git checkout HEAD^{}việc bỏ nhánh hiện tại phía sau và chuyển sang "trạng thái nguyên thủ tách rời". Vì vậy, sửa đổi tiếp theo của HEADkhông ảnh hưởng đến bất kỳ nhánh nào. Việc tách HEADra không ảnh hưởng đến worktree cũng như chỉ mục.
git reset --soft commitishsau đó di chuyển HEADđến SHA của đã cho commitish. Nếu bạn cũng muốn cập nhật chỉ mục, hãy bỏ --softđi, nhưng tôi không khuyên bạn nên làm như vậy. Điều này, một lần nữa, không chạm vào worktree và ( --soft) không phải là chỉ mục.
git checkout commitishsau đó lại gắn HEADvào commitish(nhánh) đã cho. (Nếu commitishlà SHA thì không có gì xảy ra.) Điều này cũng không ảnh hưởng đến chỉ mục cũng như worktree.
Giải pháp này chấp nhận mọi thứ đề cập đến một cam kết, vì vậy đây là lý tưởng cho một số gitbí danh. Dưới rev-parseđây chỉ là một bài kiểm tra để đảm bảo rằng không có gì bị hỏng trong chuỗi, sao cho lỗi chính tả không vô tình chuyển sang trạng thái đầu tách rời (khôi phục lỗi sẽ phức tạp hơn nhiều).
Điều này dẫn đến git hop treeishbí danh sau :
git config --global alias.hop '!f() { git rev-parse --verify "$*" && git checkout "HEAD^{}" && git reset --soft "$*" && git checkout "$*"; }; f'
FYI, bạn có thể tìm thấy nó trong danh sách gitbí danh của tôi .