Thực hiện tất cả các thay đổi của tôi trên nhánh hiện tại và chuyển chúng sang nhánh mới trong Git


105

Tôi bắt đầu làm việc với những gì tôi nghĩ sẽ là một bản sửa lỗi nhỏ trên nhánh chính của tôi. Tuy nhiên, nó đã vượt ra khỏi tầm kiểm soát đến mức tôi ước rằng ngay từ đầu tôi đã tạo ra một nhánh riêng để phát triển.

Vì vậy, ngay bây giờ điều tôi muốn làm là:

  1. Tạo một nhánh mới có tên (giả sử) "edge"
  2. Di chuyển tất cả các tệp đã thay đổi / chưa được theo dõi trên trang cái sang cạnh (sao cho tệp chính đó không thay đổi so với khi tôi bắt đầu sửa lỗi)
  3. Hoàn thành công việc của tôi trên cạnh, hợp nhất trở lại thành chủ

Tôi có thể làm cái này như thế nào?

Câu trả lời:


103

Nếu bạn chưa cam kết bất cứ điều gì, bạn đã ở đúng vị trí.

  1. Tạo một chi nhánh mới: git checkout -b edge
  2. Các tệp của bạn không thay đổi. Chỉ git addnhững gì cần và cam kết như bình thường.
  3. Khi bạn hoàn tất việc cam kết edge, hãy chuyển trở lại mastervới git checkoutgit merge edge.

Chưa cam kết gì cả, vì vậy dòng đầu tiên đó là một cảnh tượng đáng hoan nghênh ... phew, điều đó thực sự khá dễ chịu :-)
Drenai

87

Để thêm vào câu trả lời của JB, nếu bạn đã bắt đầu thực hiện một vài cam kết về chủ để những gì cuối cùng trở thành một nỗ lực "cạnh", bạn có thể:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply

stash wrapper không hoàn toàn cần thiết, nhưng chỉ dành cho các thay đổi làm việc không cam kết phải không?
HaveAGuess

4
@HaveAGuess đúng. Bằng cách "thực hiện tất cả các thay đổi của tôi", tôi cũng bao gồm các thay đổi hiện tại chưa được thêm vào. Do đó, cất giữ.
VonC

Không thể thu gọn dòng thứ hai và thứ ba thành "git checkout -b edge master"?
Paul Lynch

@PaulLynch xem xét những cam kết (trên master) mà nên trên edge trên master, vâng. Tôi đã chỉnh sửa câu trả lời.
VonC

Tôi không thấy cách git stashhữu ích ở đây, vì việc sử dụng git checkout -bhoàn toàn không sửa đổi cây làm việc ...
user1686

13

Nếu bạn đang cố gắng chuyển công việc từ nhánh chính sang một nhánh đã tồn tại, nhưng ở sau cái chính, git sẽ không cho phép bạn chuyển sang nhánh khác. Trong trường hợp này, hãy làm như sau:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.