Câu trả lời:
Điều đó sẽ gần như làm việc.
Khi đẩy đến một nhánh không mặc định, bạn cần chỉ định ref nguồn và ref đích:
git push origin branch1:branch2
Hoặc là
git push <remote> <branch with new changes>:<branch you are pushing to>
<remote>/<branch>
git push origin :branch2
suy nghĩ rằng nó sẽ chỉ đẩy chi nhánh địa phương hiện tại đến điều khiển từ xa branch2
, thay vào đó nó sẽ xóa điều khiển từ xa branch2
! Cách chính xác là git push origin HEAD:branch2
.
Chắc chắn, mặc dù nó sẽ chỉ hoạt động nếu đó là một chuyển tiếp nhanh của BRANCH2 hoặc nếu bạn buộc nó. Cú pháp đúng để làm một việc như vậy là
git push <remote> <source branch>:<dest branch>
Xem mô tả của một "refspec" trên trang git đẩy man để biết thêm chi tiết về cách thức hoạt động của nó. Cũng lưu ý rằng cả lực đẩy và thiết lập lại đều là các thao tác "viết lại lịch sử" và không nên cố gắng bởi người yếu tim trừ khi bạn chắc chắn biết bạn đang làm gì đối với bất kỳ kho lưu trữ từ xa nào khác những người có dĩa / bản sao của cùng một dự án.
git push --force remote local-branch:remote-branch
.
Nó rất đơn giản. Giả sử rằng bạn đã thực hiện các thay đổi đối với Chi nhánh A cư trú ở cả địa phương và từ xa nhưng bạn muốn đẩy các thay đổi này đến Chi nhánh B không tồn tại ở bất kỳ đâu.
Bước-01: tạo và chuyển sang nhánh B mới
kiểm tra git -b B
Bước-02: Thêm thay đổi trong nhánh cục bộ mới
git thêm. // hoặc tập tin cụ thể
Bước 03: Cam kết thay đổi
git commit -m "commit_message"
Bước-04: Đẩy các thay đổi sang nhánh B mới . Lệnh dưới đây sẽ tạo một nhánh B mới từ xa
git đẩy nguồn gốc B
Bây giờ, bạn có thể xác minh từ bitbucket rằng chi nhánh B sẽ có thêm một cam kết hơn chi nhánh Một . Và khi bạn sẽ kiểm tra các chi nhánh Một những thay đổi này sẽ không có mặt ở đó vì đây đã được đẩy vào chi nhánh B .
Lưu ý: Nếu bạn đã cam kết các thay đổi của mình vào nhánh A và sau đó bạn muốn chuyển các thay đổi đó sang nhánh B mới thì bạn sẽ phải đặt lại các thay đổi đó trước. #HappyLearning
Trong trường hợp của tôi, tôi đã có một cam kết địa phương, không được thúc đẩy origin\master
, nhưng đã cam kết với master
chi nhánh địa phương của tôi . Cam kết cục bộ này nên được đẩy sang một chi nhánh khác.
Với tiện ích mở rộng Git, bạn có thể làm một cái gì đó như thế này:
Bạn cũng có thể làm điều đó trên dòng lệnh GIT . Ví dụ được sao chép từ David Christensen :
Tôi nghĩ bạn sẽ thấy
git cherry-pick
+git reset
là một quy trình làm việc nhanh hơn nhiều:Sử dụng cùng một kịch bản của bạn, với "tính năng" là nhánh có cam kết cao nhất là không chính xác, sẽ dễ dàng hơn nhiều để làm điều này:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
Tiết kiệm khá nhiều công việc, và là kịch bản
git cherry-pick
được thiết kế để xử lý.Tôi cũng sẽ lưu ý rằng điều này cũng sẽ hoạt động nếu nó không phải là cam kết cao nhất; bạn chỉ cần một cam kết cho đối số để chọn cherry, thông qua:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history
Tôi đã nhận được một kết quả xấu với git push origin branch1:branch2
lệnh:
Trong trường hợp của tôi, branch2
đã bị xóa và branch1
đã được cập nhật với một số thay đổi mới.
Do đó, nếu bạn chỉ muốn các thay đổi thúc đẩy branch2
từ branch1
, hãy thử các quy trình dưới đây:
branch1
:git add .
branch1
:git commit -m 'comments'
Vào branch1
:git push origin branch1
Vào branch2
:git pull origin branch1
On branch1
: trở lại cam kết trước đó.
bạn có thể làm điều này một cách dễ dàng
git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
git init
#git remote remove origin
git remote add origin <http://...git>
echo "This is for demo" >> README.md
git add README.md
git commit -m "Initail Commit"
git checkout -b branch1
git branch --list
****add files***
git add -A
git status
git commit -m "Initial - branch1"
git push --set-upstream origin branch1
#git push origin --delete branch1
#git branch --unset-upstream
Bạn đã cam kết với BRANCH1 và muốn thoát khỏi cam kết này mà không mất các thay đổi? git reset là những gì bạn cần. Làm:
git branch BRANCH2
nếu bạn muốn BRANCH2 là một chi nhánh mới. Bạn cũng có thể hợp nhất cái này ở cuối với một nhánh khác nếu bạn muốn. Nếu BRANCH2 đã tồn tại, thì hãy bỏ bước này ra.
Sau đó làm:
git reset --hard HEAD~3
nếu bạn muốn đặt lại cam kết trên nhánh bạn đã cam kết. Điều này có những thay đổi của ba cam kết cuối cùng.
Sau đó thực hiện các thao tác sau để mang lại các cam kết được đặt lại cho BRANCH2
git checkout BRANCH2
Nguồn này rất hữu ích: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch
branch1
vàbranch2
cần phải ở trên điều khiển từ xa? Điều gì nếu bạn muốn đẩy từ địa phươngbranch1
đến điều khiển từ xaorigin branch2
?