2011-09-26 36 views
17

Khi sử dụng Git, tôi thường thấy mình làm như sau khi làm việc trong master:Pull, rebase, push, trong một lệnh (hoặc chỉ một vài)

# work work work... 
$ git checkout -b temp 
$ git commit -a -m 'more work done' 
$ git checkout master 
$ git pull origin master 
# turns out master was updated since my previous pull 
$ git checkout temp 
# I don't want a merge commit for a simple bugfix 
$ git rebase master 
$ git checkout master 
$ git merge temp 
$ git push origin master 
$ git branch -d temp 

... và tôi cảm thấy mệt mỏi làm điều này. Có cách nào để làm điệu nhảy này mà không có tất cả các kiểm tra, và tốt hơn là không (bằng tay) tạo nhánh tạm thời?

Trả lời

19

Nếu bạn không nhớ không tạo ra một chi nhánh gọi temp, bạn chỉ có thể làm như sau tất cả trên master:

git commit -a -m 'more work done' 
git fetch origin 
git rebase origin/master 

... hoặc tương đương:

git commit -a -m 'more work done' 
git pull --rebase origin master 

Nếu bạn làm muốn giữ chi nhánh temp, tuy nhiên, bạn vẫn có thể thực hiện việc này ngắn hơn một chút bằng cách không kiểm tra master chỉ để thực hiện pull - bạn chỉ cần fetch và sau đó rebase chi nhánh của mình lên origin/master:

# work work work... 
$ git checkout -b temp 
$ git commit -a -m 'more work done' 
$ git fetch origin 
# It looks like origin/master was updated, so: 
$ git rebase origin/master 
# Then when you finally want to merge: 
$ git checkout master 
$ git merge temp 
$ git push origin master 
$ git branch -d temp 

sehe's answer nhắc nhở tôi rằng bạn có thể thay thế:

$ git fetch origin 
$ git rebase origin/master 

... với:

$ git pull --rebase origin master 

... đó là gần tương đương. Sự khác biệt là khi bạn chạy git fetch origin, tất cả các chi nhánh theo dõi từ xa của bạn cho origin sẽ được cập nhật, trong khi khi bạn kéo chi nhánh cụ thể từ origin, không ai trong số đó - đó chỉ là tạm thời ref FETCH_HEAD được cập nhật. Cá nhân tôi thích chạy thêm một lệnh (git fetch origin), và nhìn thấy tất cả các nhánh từ xa đã thay đổi trong đầu ra.

+0

Tuyệt vời! Tôi không biết về tùy chọn '--rebase', dường như nó phù hợp với quy trình làm việc của tôi một cách hoàn hảo. –

+0

Làm việc tuyệt vời cho tôi! Nhân tiện, làm thế nào chúng ta có thể bỏ qua những thay đổi không được tổ chức/không cam kết? –

8

Bạn ít nhất có thể tối ưu hóa các rebasing: git pull --rebase

Tôi không chắc chắn chính xác như thế nào bạn thích điều gì đó, nhưng tôi thích công việc của tôi loại như thế này:

git checkout -b temp 
git commit -a -m 'more work done' 
git pull --rebase origin master 

Bằng cách đó tôi giữ tôi tập trung vào các chi nhánh trong tầm tay.

Rồi sau đó, tôi làm

git checkout master 
git pull origin master 
git merge temp 

, vv

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