2012-01-27 51 views
6

Tôi muốn tạo một nhánh git sẽ hoạt động độc lập với nhánh chính. Tôi muốn tất cả các mã hiện diện trong tổng thể cho đến bây giờ, nhưng bất kỳ thay đổi nào khác trong master không nên phản ánh trong nhánh và bất kỳ thay đổi nào trong nhánh sẽ không phản ánh trong master.Làm cách nào để tạo chi nhánh git để các tệp tôi thêm vào nó không được thêm vào chính?

tôi đã sử dụng lệnh này để tạo nhánh:

git branch test 

Nhưng bất kỳ tập tin nào để thêm vào master, tôi có thể nhìn thấy trong test. Và bất kỳ tệp mới nào được thêm vào trong test, tôi có thể thấy trong master. Làm thế nào để tránh điều này? Tôi không sử dụng bất kỳ tùy chọn --track nào trong khi tạo chi nhánh.

+2

Điều đó hoàn toàn không xảy ra. Bạn có thể chi tiết hơn một chút về cách bạn đang thực hiện các cam kết và chuyển đổi nhánh? – Mat

+0

Theo mặc định, tôi đang ở trong nhánh chính.Tôi tạo ra một nhánh mới bằng cách sử dụng lệnh: git branch test Sau đó, chuyển sang nhánh mới bằng cách sử dụng: git checkout test Thêm tệp mới vào nhánh thử nghiệm: git add newfile Chuyển sang master: git checkout master rồi: git status và tôi tìm thấy tệp mới mà tôi đã thêm vào trong nhánh thử nghiệm trong trang chính Tại sao tôi thấy tệp mới trong nhánh thử nghiệm trong trang cái? Tôi muốn nó chỉ hiển thị trong chi nhánh kiểm tra – user811433

+2

Bạn có cam kết thay đổi của mình trước khi chuyển đổi không? – Mat

Trả lời

4

Điều bạn đã yêu cầu chính xác là những gì git branch test thực hiện (một điểm mà từ đó hai lịch sử không còn được chia sẻ). Có hai cấp độ của sự nhầm lẫn ở đây mặc dù:

  • Khi bạn git add newfile, bạn đang thêm nó vào chỉ số, nhưng không cam kết nó hoặc cập nhật bất kỳ chi nhánh với nó nội dung là. Khi bạn kiểm tra một chi nhánh mới sau đó, miễn là không có xung đột, git sẽ không đặt lại những thay đổi đó từ chỉ mục. Đây là một hành vi mong muốn, ví dụ nếu bạn đang làm việc trên một nhánh khác và chỉ muốn lấy một tập hợp con các thay đổi không được cam kết đối với một nhánh khác. Nếu bạn git commit trạng thái của chỉ mục trên nhánh ban đầu của bạn, chỉ mục sẽ không giữ lại những thay đổi đó khi bạn quay trở lại nhánh thử nghiệm.

  • Khi bạn di chuyển giữa các cây có tệp mới được thêm hoặc xóa, git checkout sẽ không nhất thiết phải xóa chúng khỏi hệ thống tệp (nếu có thao tác đặt lại). Sau đó, bạn có thể "xem" các tệp này khi bạn chuyển đổi nhánh, ví dụ: ở đầu ra của ls hoặc git status - nhưng chúng "không được theo dõi" và git sẽ không cố gắng làm bất cứ điều gì với chúng (ví dụ: git commit -a sẽ không thêm tệp này vào chỉ mục trước khi viết cây mới). Điều này là không có gì phải lo lắng, nhưng nếu bạn là OCD về nó, bạn có thể xóa chúng (hoặc sử dụng git clean).

+2

Chi tiết hơn câu trả lời của tôi. +1. Lưu ý, nó không phải là OCD. Nó là CDO, ví dụ như OCD nhưng theo thứ tự bảng chữ cái. ** Vì nó nên là **. (Xin lỗi, hôm thứ Sáu, không thể cưỡng lại) – VonC

2
git branch test 
git add . 
git checkout test 
git checkout master 

Chừng nào bạn không cam kết, bạn sẽ thấy cây làm việc của bạn và chỉ số của bạn (có sự tham khảo những gì bạn đã gia tăng) ở cả hai chi nhánh testmaster.

git checkout test 
git commit -m "files for test" 
git checkout master 

Sau đó, bạn sẽ không thấy trong master các tệp bạn vừa cam kết trong test.
Bạn chi nhánh mới test sẽ ghi lại một cam kết mới (với nội dung mới), độc lập với master.

14

Tôi nghĩ rằng những gì bạn muốn là:

git checkout --orphan somebranch 

này sẽ tạo ra một somebranch không có tiền sử nào, bạn có thể thêm những file nào bạn muốn một điều đó, và họ có thể khác nhau 100% so với bạn các nhánh trước.

+0

Không phải những gì * OP * muốn, nhưng hầu hết mọi người tìm câu hỏi này đều làm gì. – jpmc26

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