git rebase
không hoạt động bình thường trong một số trường hợp nhất định tệp được thêm vào kho lưu trữ, sau đó bị xóa khỏi kho lưu trữ, sau đó được thêm vào thư mục làm việc (chứ không phải kho lưu trữ).git rebase, "sẽ bị ghi đè" và "Không thay đổi - bạn đã quên sử dụng 'git add' chưa?"
Dưới đây là một mô tả cụ thể hơn về vấn đề của tôi:
nếu một chi nhánh được tạo ra và chuyển sang từ một số thân cây,
và một tập tin X được thêm vào và cam kết tại các chi nhánh ,
và sau đó X bị xóa và cam kết trong chi nhánh,
và X là một lần nữa tạo ra trong thư mục làm việc, nhưng không được thêm hoặc cam,
và chi nhánh thân cây tiến bộ,
sau đó
một rebase thực hiện bằng cách sử dụng tiên tiến thân cây làm cơ sở sẽ không thành công vì nó sẽ từ chối ghi đè X,
và rebas e không thể được tiếp tục ngay cả khi thư mục hoạt động X bị xóa hoặc di chuyển ra khỏi đường.
Dưới đây là một kịch bản để tái tạo vấn đề của tôi trên dòng lệnh:
git init
echo foo > foo.txt
git add .
git commit -m 'foo'
echo foo >> foo.txt
git add .
git commit -m 'foo foo'
git checkout -b topic HEAD^
git log
echo bar > bar.txt
echo baz > baz.txt
git add .
git commit -m 'bar baz'
git rm bar.txt
git commit -m '-bar'
echo bar > bar.txt
git rebase master
# the following output is emitted:
# First, rewinding head to replay your work on top of it...
# Applying: bar baz
# Using index info to reconstruct a base tree...
# Falling back to patching base and 3-way merge...
# error: Untracked working tree file 'bar.txt' would be overwritten by merge. Aborting
# Failed to merge in the changes.
# Patch failed at 0001 bar baz
#
# When you have resolved this problem run "git rebase --continue".
rm bar.txt
git rebase --continue
# the following output is emitted:
# Applying: bar baz
# No changes - did you forget to use 'git add'?
#
# When you have resolved this problem run "git rebase --continue".
# If you would prefer to skip this patch, instead run "git rebase --skip".
# To restore the original branch and stop rebasing run "git rebase --abort".
Tôi biết tôi có thể hủy bỏ rebase sử dụng git rebase --abort
, loại bỏ bar.txt
, và sau đó git rebase master
một lần nữa. Nhưng làm thế nào tôi có thể tiếp tục việc rebase mà không hủy bỏ nó trước?
Tôi đề nghị sử dụng 'git-apply' vì' patch' không hỗ trợ định dạng khác biệt nhị phân Git. –