2013-10-26 14 views
11

Tôi háo hức cúi đầu vào chế độ mã và sửa đổi một số tập tin, nhưng bị bỏ quên để chi nhánh từ chủ đầu tiên. Các mods không quá rộng đến mức tôi không thể làm lại chúng, nhưng cách tốt nhất để thay đổi (cho đến nay, không được cam kết) của tôi trong master và chuyển chúng sang một nhánh mới, để lại master bị ảnh hưởng cuối cùng?Quên để git chi nhánh, cần phải di chuyển thay đổi từ master

+1

[ ** Dude. **] (https://www.google.com/search?q=Forgot+to+branch+in+git%2C+need+to+move+changes+from+master). Câu hỏi này dường như không có chủ đề vì googling tiêu đề tạo ra câu trả lời tuyệt vời. – jthill

+0

@ krmlr-- cảm ơn bạn – larryq

Trả lời

19

Nếu chưa cam kết bất cứ nơi nào (git status cho thấy một loạt các công cụ thay đổi, đó là OK nếu nó "git add" - ed too):

$ git checkout -b newbranch 

Mặc dù tên checkout cách sử dụng này (với -b) không kiểm tra bất kỳ thứ gì. Cờ -b cho biết "tạo một nhánh mới", vì vậy git tạo tên chi nhánh và làm cho nó tương ứng với cam kết HEAD hiện tại. Sau đó, nó làm cho HEAD trỏ đến nhánh mới và dừng ở đó.

Cam kết tiếp theo của bạn do đó trên newbranch, có nghĩa là cam kết gốc của nó, cam kết bạn đã bật khi bạn bắt đầu sửa đổi tệp. Vì vậy, giả sử bạn đang trên master, và bạn đã có những cam kết:

A - B - C  <-- HEAD=master 

các checkout -b làm cho đọc này:

A - B - C  <-- master, HEAD=newbranch 

và sau đó cam kết thêm hiệu mới cam kết D:

A - B - C  <-- master 
      \ 
      D <-- newbranch 
2
git stash 
git stash branch <branchname> 
+0

Điều đó sẽ hiệu quả, nhưng 'git checkout -b ' thì đơn giản hơn (và nhanh hơn một chút, nó không phải hoàn tác thay đổi và sau đó áp dụng lại chúng). – torek

2
git branch -M master my-branch 

và sau đó

git fetch origin refs/heads/master:refs/heads/master 

hoặc

git branch master my-branch (or another ref) 
+0

Đó là cách tốt để thay đổi nội dung * đã cam kết * thành chi nhánh mới 'my-branch'. – torek

Các vấn đề liên quan