2012-12-20 30 views
5

Tôi đã sử dụng GIT trong vài tuần và cố gắng hiểu cách chuyển đổi các nhánh mà không cần commit các tập tin. Đây là những gì tôi đã làm.Làm thế nào để chuyển đổi các nhánh trong nhật thực mà không thực hiện các thay đổi

  1. Đã sao chép kho lưu trữ git và có nhánh chính tại địa phương.
  2. Tạo chi nhánh địa phương mới (Branch2) dựa trên nhánh từ xa.
  3. Thực hiện thay đổi đối với 2 tệp trong nhánh chính.

Điều tôi muốn làm bây giờ là chuyển từ chủ thành Branch2. Những thay đổi tôi đã thực hiện đối với nhánh chính chỉ dành cho mục đích phát triển địa phương và không bao giờ nên được cam kết. Nhưng khi tôi cố gắng làm điều này trong nhật thực (tức là tôi nhấp đúp vào nhánh địa phương mà tôi cố gắng chuyển sang) nó vẫn nói với tôi rằng có những thay đổi không được cam kết và tôi cần cam kết, cất giấu hoặc đặt lại.

Bất cứ ai có thể cho tôi biết cách tôi có thể thực hiện thay đổi đối với tệp cục bộ và git bỏ qua thay đổi này để tôi không được nhắc với thông báo này?

+1

Thông thường nếu bạn có "cho các mục đích dev chỉ và nên không bao giờ được comitted "-files, bạn có một tập tin mẫu như' foo.bar.dist', trên thiết lập bạn sao chép nó vào 'foo.bar' và tất nhiên'/foo.bar' là trong '.gitignore'. Lý do: Bạn _will_ cam kết sớm hay muộn, nếu bạn không loại trừ nó một cách rõ ràng. – KingCrunch

+0

Hãy chắc chắn rằng bạn hiểu "chi nhánh địa phương" trong và các tính năng phân phối của Git. Công việc phát triển liên tục nên ở trong một chi nhánh địa phương. Nếu và một khi đã sẵn sàng, bạn có thể hợp nhất/đẩy nội dung vào một điều khiển từ xa. Nếu bạn không muốn xuất bản, hãy giữ nó cục bộ. Bạn nên tuân thủ "cam kết sớm, cam kết thường xuyên" như là một thực hành tốt nhất.Git stash là mạnh mẽ, nhưng phân nhánh thậm chí còn nhiều hơn. – gertvdijk

Trả lời

3

Nếu bạn không muốn thay đổi được công khai, bạn chỉ cần cam kết trong các chi nhánh tính năng của riêng bạn chứ không phải trên nhánh chính.
Bạn có thể tạo một chi nhánh mới, đặt tên cho nó phản ánh các thay đổi, có thể tiền tố là một cái gì đó như "thử nghiệm" và sau đó cam kết với chi nhánh đó trước khi chuyển sang chi nhánh khác của bạn.

Bạn có thể sử dụng lệnh git stash để lưu trữ các thay đổi của mình hoặc sử dụng lệnh git stash để chuyển trực tiếp đến một chi nhánh mới như đã đề cập bởi Ege Akpinar.

+1

Một số nhận xét thực sự hữu ích ở đây. Cảm ơn bạn. – Eddie

+0

Một số nhận xét thực sự hữu ích ở đây. Cảm ơn bạn. Vì vậy, về cơ bản, tôi không nên thực hiện thay đổi cho nhánh chính nếu tôi không muốn cam kết chúng. Tôi nên làm điều này trong một chi nhánh mới hoặc tính năng. Vì vậy, nếu tôi tạo một chi nhánh mới cho phép nói, MyNewBranch, và tôi muốn kết hợp những thay đổi này với chủ, nó chỉ đơn giản như cam kết các thay đổi trong MyNewBranch và sau đó thực hiện một hợp nhất tức là git commit -a " " git checkout master git merge MyNewBranch @PeterSmith – Eddie

+0

Có bạn chỉ có thể hợp nhất chi nhánh của bạn thành thạo. Ngoài ra, bạn có thể rebase nhánh của bạn nếu nhánh master có các commit mới và bạn muốn chắc chắn rằng bạn không nhận được các xung đột hợp nhất. Đảm bảo sử dụng 'git merge --no-ff' để duy trì lịch sử chi nhánh nếu bạn đang hợp nhất sau khi rebase. –

4

Hãy xem git stash. Stash cho phép bạn lưu trữ các thay đổi không được cam kết.

Lựa chọn 1

git stash 
git checkout -b Branch2 

thay đổi của bạn sẽ được lưu trữ trong git (địa phương). Khi bạn muốn áp dụng lại những thay đổi đó, bạn sẽ làm git stash pop và nó sẽ áp dụng những thay đổi đó cho bạn.

Lựa chọn 2

git stash 
git stash branch temporarybranch 

này sẽ đưa những thay đổi không bị giam của bạn đến một chi nhánh mới và giữ chúng ở đó đợi em. So với tùy chọn trước, điều này cho phép bạn giữ các nhánh này trên máy chủ bằng cách đẩy nhánh mới này.

Hy vọng nó giúp

+1

+1 cho chi nhánh “git stash” 'tôi không biết điều đó là có thể! –

5

Lưu ý: nếu bạn cần giấu một công việc đang tiến từ Eclipse, Egit tại supports stash:

stash in EGit

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