ถ้าฉันมีข้อผูกพันฉันจะแยกสาขาจากเอ็น -3 ได้อย่างไร
ฉันสามารถเห็นแฮชของทุกการกระทำ
ถ้าฉันมีข้อผูกพันฉันจะแยกสาขาจากเอ็น -3 ได้อย่างไร
ฉันสามารถเห็นแฮชของทุกการกระทำ
คำตอบ:
คุณสามารถสร้างสาขาผ่านแฮช:
git branch branchname <sha1-of-commit>
หรือโดยใช้การอ้างอิงสัญลักษณ์:
git branch branchname HEAD~3
หากต้องการชำระเงินเมื่อสร้างสาขาให้ใช้
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
รันgit checkout -b <name-of-branch> <sha1-of-commit>
แต่ถ้าสาขานั้นมีอยู่แล้วgit checkout -B <name-of-branch> <sha1-of-commit>
เมื่อต้องการทำสิ่งนี้บน github.com:
มายากลสามารถทำได้โดยการตั้งค่าคอมไพล์
สร้างสาขาใหม่และเปลี่ยนเป็นสาขา (เพื่อเก็บค่าคอมมิชชันล่าสุดทั้งหมดของคุณที่นี่)
git checkout -b your_new_branch
เปลี่ยนกลับเป็นสาขาที่ทำงานก่อนหน้านี้ (ถือว่าเป็นหลัก)
git checkout master
ลบการคอมมิท x ล่าสุดรักษาความสะอาดของมาสเตอร์
git reset --hard HEAD~x # in your case, x = 3
นับจากนี้เป็นต้นไปการยอมรับล่าสุดทั้งหมดจะอยู่ในสาขาใหม่เท่านั้นไม่ใช่ในสาขาการทำงานก่อนหน้าของคุณ (มาสเตอร์) อีกต่อไป
git reset --hard
ไม่เป็นความคิดที่ดีถ้าคุณได้มีการผลักดันกระทำที่มา ...
git push --force
ถ้าคุณได้ผลักสาขาก่อน
หากคุณไม่แน่ใจว่าต้องการมอบหมายสาขาใดล่วงหน้าคุณสามารถตรวจสอบคอมมิชชันและตรวจสอบโค้ดของพวกเขา (ดูซอร์สคอมไพล์การทดสอบ) โดย
git checkout <sha1-of-commit>
เมื่อคุณพบการกระทำที่คุณต้องการแยกจากคุณสามารถทำได้จากภายในการกระทำ (เช่นโดยไม่ต้องกลับไปที่ต้นแบบก่อน) เพียงแค่สร้างสาขาตามวิธีปกติ:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
" (จากคำตอบที่ยอมรับ) อย่างไร
git checkout -b
เพื่อสร้างสาขาใหม่
วิธีที่รวดเร็วในการทำธุรกรรม Github ของคุณจะเป็นดังนี้:
เพียงแค่เรียกใช้:
git checkout -b branch-name <commit>
ตัวอย่างเช่น :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
checkout
คำสั่งกับพารามิเตอร์-b
จะสร้างสาขาใหม่และมันจะเปลี่ยนไปมัน
git fetch
& git branch
คำสั่งในโฟลเดอร์โครงการของคุณโดยใช้เทอร์มินัลจากนั้นตรวจสอบว่าสาขาฟีเจอร์มีอยู่หรือไม่หากเป็นกรณีนี้ก็ใช่แน่นอนว่าคุณจะไม่สามารถสร้างสาขาจากสาขาที่ถูกลบได้คุณสามารถยกเลิกการลบสาขา สาขาหายไป
คำถามที่เกี่ยวข้องมากคือ: คุณคิดยังไงกับ--help
ตัวเลือกของ git? ลองทำสิ่งนี้:
git branch --help
เราเห็นผลลัพธ์นี้:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook
ค้นหาข้อความที่ตามมาเพื่อหาคำว่า "กระทำ" เราพบสิ่งนี้:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
เรากำลังจะไปที่ไหนซักแห่ง!
ตอนนี้มุ่งเน้นไปที่บรรทัดของ gobbledegook:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
ย่อว่า:
git branch <branchname> [<start-point>]
และเสร็จแล้ว
ในการทำเช่นนี้ใน Eclipse:
มันจะสร้างสาขาท้องถิ่นสำหรับคุณ จากนั้นเมื่อใดก็ตามที่คุณผลักดันการเปลี่ยนแปลงสาขาของคุณจะถูกผลักไปยังเซิร์ฟเวอร์ระยะไกล
คุณสามารถทำได้ใน Stash
ฉันสามารถทำมันได้เช่น:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
ที่คุณจะต้องป้อนค่าข้าม 0 คือล่าสุด 1 คือก่อนหน้า 2 คือกระทำก่อนหน้านั้นเป็นต้น
HEAD~1
(โดยที่ 1 ระบุ 1 กระทำการย้อนกลับ)?
สิ่งนี้จะสร้างสาขาด้วยคำสั่งเดียว:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
ฉันชอบวิธีนี้ดีกว่าที่เผยแพร่ข้างต้นเพราะสร้างสาขาทันที (ไม่ต้องการคำสั่ง push พิเศษหลังจากนั้น)
ใช้Sourcetree | วิธีที่ง่ายที่สุด
นี่คือสิ่งที่ฉันทำ:
C:\Users\[path]\build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch 'responsivenavigation'
C:\Users\jaimemontoya\Dropbox\CuponClub\androidapp\build>git branch
master
* responsivenavigation
ในกรณีนี้8a75b001096536b3216022484af3026aa9c7bb5b
คือและเก่ากระทำเป็นของmaster
สาขา
ไปที่คอมมิทเฉพาะของที่เก็บคอมไพล์
บางครั้งเมื่อทำงานกับพื้นที่เก็บข้อมูล git คุณต้องการกลับไปที่การมอบหมาย (การแก้ไข) ที่เฉพาะเจาะจงเพื่อให้มีภาพรวมของโครงการของคุณในเวลาที่กำหนด ในการทำสิ่งที่คุณต้องการแฮช SHA-1 ของการคอมมิทที่คุณสามารถค้นหาการตรวจสอบบันทึกได้อย่างง่ายดายด้วยคำสั่ง:
git log --abbrev-commit --pretty=oneline
ซึ่งจะให้รายการขนาดกะทัดรัดของคอมมิชชันทั้งหมดและเวอร์ชั่นสั้นของแฮช SHA-1
หลังจากที่คุณทราบแฮชของการคอมมิทที่คุณต้องการไปคุณสามารถใช้หนึ่งใน 2 คำสั่งต่อไปนี้:
git checkout HASH
หรือ
git reset --hard HASH
เช็คเอาท์
git checkout <commit> <paths>
บอกคอมไพล์แทนสถานะปัจจุบันของพา ธ ด้วยสถานะในคอมมิตที่กำหนด เส้นทางสามารถเป็นไฟล์หรือไดเรกทอรี
หากไม่ได้รับสาขา git จะถือว่า HEAD กระทำ
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
หากไม่ได้รับเส้นทาง git จะย้ายHEAD
ไปยังการกระทำที่ให้ไว้ (ดังนั้นการเปลี่ยนการกระทำที่คุณกำลังทำอยู่)
git checkout branch //means switching branches.
รีเซ็ต
git reset <commit> //re-sets the current pointer to the given commit.
หากคุณอยู่ในสาขา (โดยปกติคุณควรจะ) HEAD
และสาขานี้จะย้ายไปกระทำ
ถ้าคุณอยู่ในแฝดรัฐรีเซ็ตคอมไพล์ไม่ย้ายเท่านั้นHEAD
หากต้องการรีเซ็ตสาขาให้ตรวจสอบก่อนHEAD
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างการตั้งค่าคอมไพล์และชำระเงินคอมไพล์ที่ผมอยากจะแนะนำให้อ่านบล็อกคอมไพล์อย่างเป็นทางการ
git log --abbrev-commit --pretty=oneline
สามารถย่อได้git log --oneline
สำหรับผู้ใช้ Git GUI คุณสามารถมองเห็นประวัติทั้งหมด (ถ้าจำเป็น) จากนั้นคลิกขวาที่คำสั่งที่คุณต้องการแยกสาขาและป้อนชื่อสาขา
วิธีทำคำตอบที่ยอมรับใน Visual Studio 2015 และ 2017:
คลิกในการเปลี่ยนแปลง (ลูกศรสีแดงด้านบน)
คลิกในการกระทำ (ลูกศรสีแดงด้านบน) และคลิกในดูประวัติบนเมนูแบบเลื่อนลง
และแท็บใหม่จะเปิดขึ้น:
และคุณควรคลิกขวาที่การยอมรับก่อนหน้านี้ว่าคุณต้องการให้รหัสของคุณเปลี่ยนกลับเป็น:
เลือกชำระเงินสาขาใหม่และvoilá!
ด้านล่างแม้ว่าจะไม่ใช่ส่วนหนึ่งของคำถาม OP แต่ฉันทำทั้งสองอย่างมากและอันนี้เป็นขั้นตอนที่หลอกลวงอย่างน้อยสำหรับฉัน: ถ้าคุณต้องการย้อนกลับไปสู่การกระทำก่อนหน้าโดยไม่ต้องเช็คสาขาใหม่อย่าเลือกเปลี่ยน (! ?); คุณควรเลือกนิยามใหม่ - ผสมหรือ - ฮาร์ด:
ถ้าคุณใช้ซอร์สทรีที่ตรงไปตรงมา
หากคุณกำลังมองหาโซลูชันที่ใช้บรรทัดคำสั่งคุณสามารถละเว้นคำตอบของฉันได้ ผมจะขอแนะนำให้คุณใช้GitKraken มันเป็นไคลเอนต์ git UI ที่ไม่ธรรมดา มันแสดงแผนผัง Git ในหน้าแรก คุณสามารถดูพวกเขาและรู้ว่าเกิดอะไรขึ้นกับโครงการ เพียงเลือกการกระทำที่เฉพาะเจาะจงคลิกขวาที่มันและเลือกตัวเลือก 'สร้างสาขาที่นี่' มันจะให้กล่องข้อความเพื่อป้อนชื่อสาขา ป้อนชื่อสาขาเลือก 'ตกลง' และคุณถูกตั้งค่า มันใช้งานง่ายมากจริงๆ