2012-05-15 39 views
5

Tôi có một kho lưu trữ trên github, nói testrepo. Bây giờ tôi muốn thiết lập một kho lưu trữ cục bộ repo có một chi nhánh origin-master nơi tôi muốn có thể chỉnh sửa mọi thứ từ kho lưu trữ.Hiểu git: kết nối chi nhánh với một kho lưu trữ từ xa

repo/origin-master <--------> origin/master 

Các nhân bản hoạt động tốt:

mkdir repo && cd repo && git init 
# not necessary of course: 
echo "master" > master && git add master && git ci -m "master" 
git remote add origin [email protected]:<username>/testrepo.git 
git fetch origin 
git branch --set-upstream origin-master origin/master 
git checkout origin-master 
# create a new file: 
echo "for origin-master" > orig-master && git add orig-master && git ci -m "orig-master" 

nhưng

git push origin 
To [email protected]:<username>/testrepo.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:<username>/testrepo.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

Làm thế nào tôi có thể nói git rằng nếu tôi muốn đẩy tới nguồn gốc, tôi muốn đẩy chi nhánh địa phương origin-master để origin/master?

+0

Hiển thị chuỗi không hoạt động, không phải trình tự hoạt động. – jthill

Trả lời

2

Đặt chế độ push mặc định của bạn lên thượng nguồn:

$ git config push.default upstream 
$ git push origin 

git push origin cũng giống như git push origin :, mà đẩy tất cả các "phù hợp" chi nhánh theo mặc định. Chi nhánh master-master của bạn không khớp, do đó, nó cố gắng lấy nhánh mà thực hiện khớp (master) và đẩy nó đến gốc.

Ngoài ra, bạn có thể chỉ định push refspecs trên một cơ sở cho mỗi từ xa:

$ git config --add remote.origin.push origin-master:master 
$ git push origin 

Xem thêm git-push examplesgit-config.

4

Xem this post để được tư vấn tốt về cách chuyển sang kho lưu trữ không phải là bản sao (không có bản sao làm việc). Về cơ bản những gì đang xảy ra ở đây là khi bạn đẩy theo cách này, repo từ xa không cập nhật bản sao làm việc của nó (các tập tin thực), chỉ có lịch sử của nó. Sau đó, bạn cần phải git reset --hard trên đó để làm mới các tệp nhưng điều đó rất nguy hiểm vì bạn sẽ mất các sửa đổi không được cam kết.

Là một lời khuyên chung tôi muốn nói là muốn kéo đẩy khi xử lý nhiều kho lưu trữ không trống: push to only bare repositories!

+0

OK, đây là lời khuyên tốt, tôi sẽ làm như vậy. – topskip

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