Tuyên bố từ chối trách nhiệm: git không phức tạp, nó rất linh hoạt. Đừng sợ hãi chỉ vì tôi đã lan man vào một câu trả lời dài :)
Bạn có:
master: a-b-c-d-e-f
và muốn thay đổi c
. Bạn đã làm:
* git checkout c
(. Tránh kiểm tra ra cam kết trong tương lai Di chuyển người đứng đầu chi nhánh thay vì)
* thay đổi một số file
Bạn đang ở:
master: a-b-c-d-e-f
\uncommitted-work,detached
Nếu bạn muốn áp dụng lại def trên đầu trang của bạn "c"
(Nếu bạn đã đẩy, người hạ lưu sẽ có to recover from upstream rebase)
git stash .
git checkout master
git stash pop
(giải quyết xung đột)
git stage .
git commit -m "temporary name for g"
- (
master: a-b-c-d-e-f-g
)
git rebase c -i
("áp dụng lại nhánh hiện tại của tôi lên điểm c, và để tôi thao tác các cam kết tương tác", nghĩa là, cha mẹ (rebase) d-e-f
lên một mới c
)
- Làm theo guide to interactive rebase. Bạn muốn đặt hàng lại
g
do đó, sau c, sau đó thay đổi lệnh rebase từ pick
thành fixup
. dd
để xóa một dòng, P
để đặt đường, i
để vào chế độ chèn để nhập "sửa lỗi" rồi :wq
để lưu và thoát khỏi vim.
- (
master: a-b-c'-d'-e'-f'
, trong đó c'
là kết quả của việc bạn hợp nhất g
và c
trong khi rebase.d-e-f
đã trở thành d'-e'-f'
như tổ tiên của họ đã thay đổi vì vậy họ không phải là người "cùng một" cam kết như xa như git là có liên quan, nhưng nội dung của họ vẫn như cũ)
Nếu bạn muốn phục hồi lại d-e-f
(và viết lại lịch sử như nếu bạn không bao giờ làm cho họ)
(Nếu bạn đã đẩy, người hạ lưu sẽ có to recover from upstream rebase):
git stash .
git checkout master
- (
master: a-b-c-d-e-f
, với các tập tin giấu ban đầu dựa trên c)
git reset --hard c
(loại bỏ tất cả các file và cam kết về tổng thể từ c)
- (
master: a-b-c
, với các tập tin giấu)
git stash pop
(quyết tâm xung đột)
- (
master: a-b-c-*
)
git stage .
git commit -m "description of g"
- (
master: a-b-c-g
)
Nếu bạn muốn phục hồi lại d-e-f (nhưng giữ chúng trong lịch sử)
git stash
git revert --no-commit d
git revert --no-commit e
git revert --no-commit f
git push
git stash pop
(sẽ không có xung đột)
git stage .
git commit -m "Undo d-e-f in order to fix..."
git push
Nếu bạn có git push
d-e-f, và bạn muốn t o giữ chúng riêng biệt:
Âm thanh như những thay đổi mới của bạn là dành cho nhánh mới. git branch <foo>
.
* Tôi đã thực hiện một số thay đổi và bây giờ muốn lưu chúng. * Vui lòng cụ thể hơn: ý của bạn là "lưu"? Bạn chủ yếu có hai lựa chọn: cam kết, hoặc stash. Hoặc là một trong những "sẽ" tiết kiệm thay đổi của bạn trong một số ý nghĩa. Bạn đang đề cập đến cái nào? Ngoài ra, bạn có thể muốn tạo một chi nhánh. – Jubobs
Tôi muốn thực hiện các thay đổi của mình. – Nikolas
Tôi đã chỉnh sửa câu hỏi của bạn cho phù hợp. – Jubobs