เป็นไปได้ไหมที่จะคอมมิทและผลักดันการเปลี่ยนแปลงจากสาขาหนึ่งไปอีกสาขาหนึ่ง
สมมติผมมุ่งมั่นที่เปลี่ยนแปลงในBRANCH1และต้องการที่จะผลักดันให้BRANCH2
จากBRANCH1จะสามารถทำได้:
git push origin **BRANCH2**
แล้วรีเซ็ต BRANCH1 หรือไม่
เป็นไปได้ไหมที่จะคอมมิทและผลักดันการเปลี่ยนแปลงจากสาขาหนึ่งไปอีกสาขาหนึ่ง
สมมติผมมุ่งมั่นที่เปลี่ยนแปลงในBRANCH1และต้องการที่จะผลักดันให้BRANCH2
จากBRANCH1จะสามารถทำได้:
git push origin **BRANCH2**
แล้วรีเซ็ต BRANCH1 หรือไม่
คำตอบ:
เกือบจะได้ผล
เมื่อกดไปที่สาขาที่ไม่ใช่ค่าเริ่มต้นคุณจะต้องระบุแหล่งอ้างอิงและการอ้างอิงเป้าหมาย:
git push origin branch1:branch2
หรือ
git push <remote> <branch with new changes>:<branch you are pushing to>
<remote>/<branch>
git push origin :branch2
คิดว่ามันจะผลักสาขาท้องถิ่นปัจจุบันไปที่รีโมตbranch2
แทนมันจะลบรีโมตแทนbranch2
! git push origin HEAD:branch2
วิธีที่ถูกต้องคือ
แน่นอนว่ามันจะใช้งานได้หากเป็นไปข้างหน้าอย่างรวดเร็วของ BRANCH2 หรือหากคุณบังคับ ไวยากรณ์ที่ถูกต้องในการทำสิ่งนั้นคือ
git push <remote> <source branch>:<dest branch>
ดูคำอธิบายของ "refspec" บนหน้าgit push manสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงาน นอกจากนี้โปรดทราบว่าทั้งการกดปุ่มบังคับและการรีเซ็ตเป็นการดำเนินการที่ "เขียนประวัติศาสตร์" และไม่ควรพยายามด้วยความกระวนกระวายใจเว้นแต่คุณจะแน่ใจอย่างแน่นอนว่าคุณรู้ว่าคุณกำลังทำอะไรกับที่เก็บข้อมูลระยะไกลและอื่น ๆ ผู้ที่มีส้อม / โคลนของโครงการเดียวกัน
git push --force remote local-branch:remote-branch
ฉันเพิ่งจะเพิ่มที่คุณสามารถบังคับกับ
มันง่ายมาก สมมติว่าคุณได้ทำการเปลี่ยนแปลงสาขาของคุณซึ่งอยู่ในสถานที่ทั้งในประเทศและจากระยะไกล แต่คุณต้องการที่จะผลักดันการเปลี่ยนแปลงเหล่านี้สาขาBซึ่งไม่มีที่ใดก็ได้
Step-01:สร้างและเปลี่ยนเป็นสาขาใหม่B
git checkout -b B
ขั้นตอนที่ 02:เพิ่มการเปลี่ยนแปลงในสาขาท้องถิ่นใหม่
คอมไพล์เพิ่ม // หรือไฟล์เฉพาะ
Step-03:ยืนยันการเปลี่ยนแปลง
คอมไพล์กระทำ -m "commit_message"
ขั้นตอนที่ 04:การผลักดันการเปลี่ยนแปลงไปยังสาขาใหม่B คำสั่งด้านล่างจะสร้างสาขาใหม่ Bจากระยะไกล
git push กำเนิด B
ตอนนี้คุณสามารถตรวจสอบได้จาก bitbucket ว่าสาขาBจะมีอีกหนึ่งกระทำกว่าสาขา และเมื่อคุณจะชำระเงินสาขาAการเปลี่ยนแปลงเหล่านี้จะไม่อยู่ที่นั่นเนื่องจากสิ่งเหล่านี้ได้ถูกผลักเข้าสู่สาขา B
หมายเหตุ:หากคุณยอมรับการเปลี่ยนแปลงในสาขาAและหลังจากนั้นคุณต้องการเปลี่ยนการเปลี่ยนแปลงเหล่านั้นไปยังสาขาใหม่Bคุณจะต้องรีเซ็ตการเปลี่ยนแปลงเหล่านั้นก่อน #HappyLearning
ในกรณีของฉันฉันมีความมุ่งมั่นในท้องถิ่นซึ่งไม่ได้ถูกผลักไปorigin\master
แต่มุ่งมั่นที่จะทำในท้องถิ่นของฉันmaster
สาขาความมุ่งมั่นในท้องถิ่นนี้ควรผลักไปที่สาขาอื่น
ด้วยGit Extensionsคุณสามารถทำสิ่งนี้:
นอกจากนี้คุณยังสามารถดำเนินการได้ในบรรทัดคำสั่ง GIT ตัวอย่างที่คัดลอกมาจากDavid Christensen :
ฉันคิดว่าคุณจะพบว่า
git cherry-pick
+git reset
เป็นขั้นตอนการทำงานที่เร็วกว่ามาก:การใช้สถานการณ์เดียวกันของคุณด้วย "ฟีเจอร์" ที่เป็นสาขาที่มีการคอมมิชชันสูงสุดไม่ถูกต้องการทำเช่นนี้จะทำได้ง่ายกว่ามาก:
git checkout master
git cherry-pick feature
git checkout feature
git reset --hard HEAD^
บันทึกงานค่อนข้างน้อยและเป็นสถานการณ์ที่
git cherry-pick
ออกแบบมาเพื่อจัดการฉันจะทราบด้วยว่าสิ่งนี้จะได้ผลเช่นกันหากไม่ใช่การกระทำสูงสุด คุณเพียงแค่ต้องการคอมมิชชันสำหรับการโต้แย้งที่จะเลือกเชอร์รี่ผ่าน:
git checkout master
git cherry-pick $sha1
git checkout feature
git rebase -i ... # whack the specific commit from the history
ฉันได้ผลลัพธ์ที่ไม่ดีพร้อมgit push origin branch1:branch2
คำสั่ง:
ในกรณีของฉันbranch2
ถูกลบและbranch1
ได้รับการปรับปรุงด้วยการเปลี่ยนแปลงใหม่
ดังนั้นหากคุณต้องการเพียงการเปลี่ยนแปลงที่ผลักดันbranch2
จากให้branch1
ลองขั้นตอนด้านล่าง:
branch1
:git add .
branch1
:git commit -m 'comments'
เปิดbranch1
:git push origin branch1
เปิดbranch2
:git pull origin branch1
เปิดbranch1
: เปลี่ยนกลับเป็นการกระทำก่อนหน้า
คุณสามารถทำสิ่งนี้ได้อย่างง่ายดาย
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
คุณมีความมุ่งมั่นที่จะ BRANCH1 และต้องการที่จะกำจัดการกระทำนี้โดยไม่สูญเสียการเปลี่ยนแปลง? git resetคือสิ่งที่คุณต้องการ ทำ:
git branch BRANCH2
ถ้าคุณต้องการให้ BRANCH2 เป็นสาขาใหม่ คุณสามารถรวมสาขานี้กับสาขาอื่นหากต้องการ หาก BRANCH2 มีอยู่แล้วให้ออกจากขั้นตอนนี้
จากนั้นทำ:
git reset --hard HEAD~3
หากคุณต้องการรีเซ็ตการกระทำในสาขาที่คุณได้ทำ การดำเนินการนี้จะทำการเปลี่ยนแปลงในสามครั้งล่าสุด
จากนั้นทำสิ่งต่อไปนี้เพื่อนำการตั้งค่าใหม่ไปที่ BRANCH2
git checkout BRANCH2
แหล่งข้อมูลนี้มีประโยชน์: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch
branch1
และbranch2
จำเป็นต้องอยู่บนรีโมทหรือไม่? เกิดอะไรขึ้นถ้าคุณต้องการที่จะผลักดันจากท้องถิ่นbranch1
ไปยังระยะไกลorigin branch2
?