Giả sử chúng ta có tình huống sau trong Git:
Một kho lưu trữ đã tạo:
mkdir GitTest2 cd GitTest2 git init
Một số sửa đổi trong bản gốc diễn ra và được cam kết:
echo "On Master" > file git commit -a -m "Initial commit"
Feature1 rẽ nhánh chủ và một số công việc được thực hiện:
git branch feature1 git checkout feature1 echo "Feature1" > featureFile git commit -a -m "Commit for feature1"
Trong khi đó, một lỗi được phát hiện trong mã chủ và một nhánh hotfix được thiết lập:
git checkout master git branch hotfix1 git checkout hotfix1
Lỗi được sửa trong nhánh hotfix và được hợp nhất trở lại vào bản gốc (có lẽ sau khi xem xét yêu cầu kéo / mã):
echo "Bugfix" > bugfixFile git commit -a -m "Bugfix Commit" git checkout master git merge --no-ff hotfix1
Phát triển trên Feature1 tiếp tục:
git checkout feature1
Nói rằng tôi cần hotfix trong nhánh tính năng của mình, có thể do lỗi cũng xảy ra ở đó. Làm cách nào tôi có thể đạt được điều này mà không cần sao chép các cam kết vào nhánh tính năng của mình?
Tôi muốn ngăn chặn để có được hai cam kết mới trên nhánh tính năng của mình mà không liên quan đến việc triển khai tính năng. Điều này đặc biệt quan trọng đối với tôi nếu tôi sử dụng các yêu cầu kéo: Tất cả các cam kết này cũng sẽ được bao gồm trong yêu cầu kéo và phải được xem xét mặc dù điều này đã được thực hiện (vì hotfix đã có trong bản gốc).
Tôi không thể thực hiện git merge master --ff-only
: "gây tử vong: Không thể tiến nhanh, hủy bỏ.", Nhưng tôi không chắc liệu điều này có giúp tôi không.
git rebase
có vẻ như là ma thuật đen đối với tôi ....
git branch feature1
và git checkout feature1
có thể được kết hợp thành git checkout -b feature1
và 4. hoàn toàn có thể được giảm xuống thànhgit checkout -b hotfix1 master
feature1
là hoàn toàn địa phương, có một cái nhìn tạigit rebase
.