2012-01-20 30 views
5

Tôi mới tham gia git và tôi muốn biết cách giải quyết một kịch bản rất cơ bản. Tôi đọc rất nhiều bài viết trên stackoverflow về git nhưng vẫn không thể tìm ra câu trả lời.Cách theo dõi nguồn gốc/chủ trong chi nhánh dev git của tôi

Chúng tôi có nhánh gốc/chủ từ xa mà mọi người đang làm việc. Tôi có một tính năng mà tôi muốn triển khai và có thể mất thời gian để phát triển. Trong khi đó, mọi người có thể đang kiểm tra mã nguồn gốc/chủ.

gì sẽ nhìn công việc của tôi như thế và làm thế nào tôi nên đi về việc thiết lập git branch của tôi, do nhu cầu sau:

  1. Tôi muốn để có thể cam kết thay đổi mã để chi nhánh của tôi và đẩy họ đến một nhánh từ xa trên máy chủ của chúng tôi vì vậy tôi không mất các thay đổi trong trường hợp máy tính của tôi bị rán.

  2. Tôi muốn cập nhật chi nhánh của mình với chi nhánh chính.

  3. Tôi muốn giảm thiểu việc hợp nhất thông thường. Tôi thích khái niệm về git rebase vì vậy tôi muốn tối đa hóa việc sử dụng nó và do đó hợp nhất nhanh về phía trước.

  4. Tại một thời điểm nào đó, chúng tôi sẽ phải hợp nhất chi nhánh FeatureA của tôi vào nguồn gốc/chính.

Tóm tắt:

Làm thế nào để thiết lập một chi nhánh mà kéo từ nguồn gốc/master nhưng đẩy tới nguồn gốc/MY-CHI NHÁNH?

Quy trình làm việc của tôi sẽ như thế nào?

CẬP NHẬT:

Cảm ơn bạn @ will-pragnell! Sự khác nhau giữa giải pháp của bạn và những điều sau đây là gì.

Trang này trên github đề nghị:

https://github.com/diaspora/diaspora/wiki/Git-Workflow

Để có được các bản cập nhật mới nhất từ ​​thân cây phát triển làm một thiết lập một lần để thiết lập các GitHub repo chính như một điều khiển từ xa bằng cách nhập:

$ git remote add upstream git://github.com/diaspora/diaspora.git 
$ git fetch upstream 
$ git checkout master 
$ git rebase upstream/master 
$ git checkout 100-retweet-bugfix 

[chắc chắn rằng tất cả các cam kết khi cần thiết trong ngành]

$ git rebase master 

Trả lời

5

Bạn có thể không muốn một chi nhánh kéo từ chủ và đẩy đến chi nhánh của riêng bạn. Những gì bạn muốn là để kéo từ tổng thể vào chủ địa phương của bạn, xử lý rebasing tại địa phương, và sau đó đẩy đến chi nhánh từ xa của riêng bạn cho các tính năng. Đây là một quy trình làm việc khá chuẩn và cho phép bạn kiểm soát hoàn toàn và một số tiền tối thiểu của việc hợp nhất.Cá nhân tôi sẽ làm điều đó như thế này:

Tạo một chi nhánh địa phương mới

git checkout -b myFeature 

Đẩy rằng đến một chi nhánh ở xa mới (xem this stackoverflow question nếu bạn cần biết thêm về bước này)

git push origin myFeature 

Bây giờ bạn có thể làm việc một cách vội vã trên nhánh myFeature, đẩy sử dụng lệnh trên khi bạn cần mà không làm rối tung nhánh master. Khi bạn cần để có được giữ các cam kết mà người khác đã thực hiện trên tổng thể, bạn có thể làm như vậy như thế này:

git checkout master 
git pull (this will just fast-forward if you don't make any local changes to master) 
git checkout myFeature 
git rebase master 

Khi tính năng của bạn được hoàn tất, bạn có thể hợp nhất hoặc rebase chi nhánh của bạn trở lại để làm chủ để mọi người người khác có tính năng mới của bạn. Như thế này:

git checkout master 
git merge myFeature 
git push origin master 
+0

Cảm ơn bạn @ will-Pragnell! Câu hỏi của tôi được cập nhật với những điều sau đây: Sự khác biệt giữa dung dịch ur và những điều sau đây là gì. Trang này trên github đề xuất: https://github.com/diaspora/diaspora/wiki/Git-Workflow Để nhận các cập nhật mới nhất từ ​​thân cây phát triển, hãy thiết lập một lần để thiết lập repo GitHub chính làm điều khiển từ xa bằng cách nhập: $ git remote add upstream git: //github.com/diaspora/diaspora.git, $ git fetch upstream, $ git checkout master, $ git rebase upstream/master, $ git checkout 100-retweet-bugfix, [đảm bảo tất cả được cam kết khi cần thiết trong chi nhánh], $ git rebase master – ben39

+0

sau khi thực hiện: 'git checkout master git merge myFeature git push origin master' Tôi nhận được '! [bị từ chối] nhiều người gửi -> nhiều người gửi (không chuyển tiếp nhanh) lỗi: không thể đẩy một số lần chuyển sang 'ssh: // xxx' Để ngăn bạn mất lịch sử, các bản cập nhật không nhanh chóng bị từ chối Hợp nhất các thay đổi từ xa (ví dụ 'git pull') trước khi đẩy lại. Xem phần 'Lưu ý về chuyển tiếp nhanh' của 'git push --help' để biết chi tiết.' – ben39

+0

Về nhận xét thứ hai của bạn - bạn có rebase lên master trước khi bạn cố gắng hợp nhất không? (Sẽ có một cái nhìn bình luận đầu tiên của bạn sau này một chút khi tôi có một khoảnh khắc rảnh rỗi - xin lỗi, siêu bận ở đây!) –

0

git checkout -b FeatureA (tạo và chi nhánh thanh toán)
git push origin FeatureA (đẩy chi nhánh mới được tạo vào nguồn gốc)

Làm việc trên FeatureA chi nhánh mới. Bạn không muốn hợp nhất thường xuyên sau đó để rebase

git rebase origin 

Trong tương lai bất cứ khi nào bạn muốn hợp nhất vào trang cái.

git checkout master 
git merge FeatureA 
git push origin master 
+0

Bất cứ lúc nào tôi làm 'git rebase master' thì 'git push origin/multi-senders' tôi nhận được thông tin sau đây 'To ssh: xxx ![bị từ chối] nhiều người gửi -> nhiều người gửi (không chuyển tiếp nhanh) lỗi: không thể đẩy một số lần chuyển sang 'ssh: // xxx' Để ngăn bạn mất lịch sử, các bản cập nhật không nhanh chóng bị từ chối . Hợp nhất các thay đổi từ xa (ví dụ: 'git pull') trước khi đẩy lại. Xem phần 'Lưu ý về chuyển tiếp nhanh' của 'git push --help' để biết chi tiết.' – ben39

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