คำถามติดแท็ก git-rebase

ด้วยคำสั่ง git-rebase คุณสามารถทำการเปลี่ยนแปลงจากหนึ่งสาขาและเล่นซ้ำบนสุดของสาขาอื่น

8
ลบโฟลเดอร์และเนื้อหาออกจากประวัติของ git / GitHub
ฉันทำงานที่เก็บข้อมูลในบัญชี GitHub ของฉันและนี่เป็นปัญหาที่ฉันสะดุด โปรเจ็กต์ Node.js พร้อมโฟลเดอร์ที่ติดตั้งแพ็กเกจ npm สองสามตัว แพ็คเกจอยู่ในnode_modulesโฟลเดอร์ เพิ่มโฟลเดอร์นั้นไปยังที่เก็บ git และผลักรหัสไปที่ github (ไม่ได้คิดเกี่ยวกับส่วนของ npm ในเวลานั้น) รับรู้ว่าคุณไม่จำเป็นต้องใช้โฟลเดอร์นั้นเพื่อเป็นส่วนหนึ่งของรหัส ลบโฟลเดอร์นั้นแล้วผลักออก ในกรณีดังกล่าวขนาดของ repo git รวมอยู่ที่ประมาณ6MBซึ่งโค้ดจริง (ทั้งหมดยกเว้นโฟลเดอร์นั้น) มีขนาดประมาณ300 KBเท่านั้น ตอนนี้สิ่งที่ฉันกำลังมองหาในที่สุดคือวิธีการกำจัดรายละเอียดของโฟลเดอร์แพ็คเกจจากประวัติของ git ดังนั้นหากใครบางคนลอกแบบพวกเขาไม่ต้องดาวน์โหลดประวัติมูลค่า 6mb ที่ไฟล์จริงเท่านั้นที่พวกเขาจะได้รับ ณ ค่าคอมมิชชันล่าสุดจะเป็น 300KB ฉันค้นหาวิธีแก้ปัญหาที่เป็นไปได้สำหรับสิ่งนี้และลองใช้ทั้งสองวิธี ลบไฟล์ออกจากที่เก็บ git (ประวัติ) http://help.github.com/remove-sensitive-data/ https://gist.github.com/1588371 สรุปสาระสำคัญดูเหมือนว่ามันทำงานที่ไหนหลังจากที่เรียกใช้สคริปต์ก็แสดงให้เห็นว่ามันได้รับการกำจัดของโฟลเดอร์นั้นและหลังจากนั้นมันก็แสดงให้เห็นว่า 50 commits ที่แตกต่างกันได้รับการแก้ไข แต่มันก็ไม่ให้ฉันกดรหัสนั้น เมื่อฉันพยายามที่จะผลักดันมันก็กล่าวว่าBranch up to dateแต่แสดงให้เห็นว่า 50 git …
318 git  github  rebase  git-rebase 

3
Rebase branch feature ไปที่ branch ฟีเจอร์อื่น
ฉันมีสาขาฟีเจอร์ (ส่วนตัว) สองสาขาที่ฉันทำงานอยู่ a -- b -- c <-- Master \ \ \ d -- e <-- Branch1 \ f -- g <-- Branch2 หลังจากทำงานกับสาขาเหล่านี้เล็กน้อยในขณะที่ฉันพบว่าฉันต้องการการเปลี่ยนแปลงจาก Branch2 ใน Branch1 ฉันต้องการลดการเปลี่ยนแปลงใน Branch2 ลงใน Branch1 ฉันต้องการที่จะจบลงด้วยต่อไปนี้: a -- b -- c <-- Master \ d -- e -- f -- g <-- Branch1 …


15
แทรกการกระทำก่อนที่จะคอมมิทใน Git?
ฉันถามก่อนเกี่ยวกับวิธีการสควอชสองคอมมิชชันในที่เก็บคอมไพล์ ในขณะที่วิธีแก้ปัญหานั้นค่อนข้างน่าสนใจและไม่เหมือนกับการแปรปรวนทางใจเหมือนกับสิ่งอื่น ๆ ในคอมไพล์พวกเขายังคงได้รับความเจ็บปวดหากคุณจำเป็นต้องทำตามขั้นตอนซ้ำหลายครั้งในการพัฒนาโครงการของคุณ ดังนั้นฉันควรจะผ่านความเจ็บปวดเพียงครั้งเดียวและจากนั้นสามารถใช้การปฏิเสธแบบโต้ตอบมาตรฐานได้ตลอดไป สิ่งที่ฉันต้องการจะทำคือการมีความมุ่งมั่นเริ่มต้นว่างเปล่าที่มีอยู่เพียงเพื่อวัตถุประสงค์ในการเป็นคนแรก ไม่มีรหัสไม่มีอะไรเลย เพียงแค่สละพื้นที่เพื่อให้สามารถเป็นฐานสำหรับการรีบูต คำถามของฉันคือการมีที่เก็บข้อมูลที่มีอยู่ฉันจะดำเนินการเกี่ยวกับการใส่ข้อมูลคอมมิชชันใหม่ที่ว่างเปล่าไว้ก่อนหน้าแรกและเปลี่ยนคนอื่นให้ส่งต่อได้อย่างไร

5
“ การบรรจุที่เก็บอัตโนมัติเพื่อประสิทธิภาพสูงสุด” หมายความว่าอย่างไร
ฉันมีปัญหากับ repo คอมไพล์ของฉัน สองสามวันที่ผ่านมาเมื่อใดก็ตามที่ฉันกดเซิร์ฟเวอร์ฉันจะได้รับข้อความนี้: "การบรรจุที่เก็บอัตโนมัติเพื่อประสิทธิภาพที่ดีที่สุด" และดูเหมือนจะไม่หายไปไหนและกลับเชลล์ ฉันยังลองเช็คเอาท์ที่สาขาใหม่จากนั้นทำการ rebase ที่สาขาก่อนหน้าของฉันแล้วgit gcทำการลบวัตถุประวัติที่ไม่ได้ใช้แล้วทำการพุช แต่ยังมีข้อความนี้ปรากฏขึ้น โปรดแจ้งให้เราทราบว่าเกิดอะไรขึ้นกับ repo ของฉัน
225 git  git-rebase  git-push 

3
เลือกกลยุทธ์การรวม Git สำหรับไฟล์เฉพาะ (“ ของเรา”,“ ของฉัน”,“ ของพวกเขา”)
ผมอยู่ในช่วงกลางของ rebasing git pull --rebaseหลังจากที่ ฉันมีไฟล์ไม่กี่ไฟล์ที่มีข้อขัดแย้งผสาน ฉันจะยอมรับการเปลี่ยนแปลง "ของพวกเขา" หรือ "การเปลี่ยนแปลง" ของฉันสำหรับไฟล์เฉพาะได้อย่างไร $ git status # Not currently on any branch. # You are currently rebasing. # (fix conflicts and then run "git rebase --continue") # (use "git rebase --skip" to skip this patch) # (use "git rebase --abort" to check …

8
รวมสองคอมมิตแรกของที่เก็บ Git หรือไม่?
สมมติว่าคุณมีประวัติที่มีทั้งสามยอมรับA, BและC : A-B-C ฉันต้องการรวมทั้งสองกระทำAและBกับหนึ่งกระทำAB : AB-C ฉันเหนื่อย git rebase -i A ซึ่งเปิดตัวแก้ไขของฉันด้วยเนื้อหาต่อไปนี้: pick e97a17b B pick asd314f C ฉันเปลี่ยนสิ่งนี้เป็น squash e97a17b B pick asd314f C จากนั้น Git 1.6.0.4 พูดว่า: Cannot 'squash' without a previous commit มีวิธีหรือเป็นไปไม่ได้?

18
Git - วิธีแก้ไข rebase เชิงโต้ตอบ“ เสียหาย”
ฉันจัดการเพื่อสร้างระเบียบเล็ก ๆ น้อย ๆ ในพื้นที่เก็บข้อมูล git ท้องถิ่นของฉัน ผมพยายามที่จะแก้ไขเสียกระทำโดยใช้คำแนะนำต่อไปนี้ ก่อนเรียกใช้ "git commit - แก้ไข" (และหลังจากรีบูต git - โต้ตอบ) ฉันตัดสินใจว่าการเปลี่ยนแปลงของฉันไม่ถูกต้องและดังนั้นฉันจึงเรียกใช้ "git reset HEAD - ฮาร์ด" ไม่ใช่ความคิดที่ดีฉันบอกคุณ ขณะนี้การลดระดับอินเตอร์แอกทีฟดูเหมือนจะ "ติดอยู่" Git แสดงสาขาปัจจุบันเป็น (| REBASE-m) ทุกคำสั่ง (cd .. , ls, git rebase ... ) ภายในที่เก็บของฉันมีข้อผิดพลาดดังต่อไปนี้: cat: .git / rebase-merge / head-name: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ต่อไปนี้เป็นวิธีการรีคอมไพล์ git - …
184 git  msysgit  git-rebase 

5
ฉันจะสควอชได้อย่างไร
ฉันค่อนข้างใหม่กับคุณสมบัติการรีบูตทั้งหมดภายในคอมไพล์ สมมติว่าฉันได้ทำสิ่งต่อไปนี้: A -> B -> C -> D หลังจากนั้นฉันทราบว่าDมีการแก้ไขซึ่งขึ้นอยู่กับรหัสใหม่บางอย่างที่เพิ่มเข้ามาAและการกระทำเหล่านี้อยู่ด้วยกัน ฉันจะสควอชวิธีAและDร่วมกันและการลาBและCคนเดียว?
183 git  git-rebase 

5
การรีบูตการคอมไพล์ Git
ใช้กรณีต่อไปนี้: ฉันมีงานในสาขาหัวข้อและตอนนี้ฉันพร้อมที่จะรวมกลับไปเป็นหลัก: * eb3b733 3 [master] [origin/master] | * b62cae6 2 [topic] |/ * 38abeae 1 ฉันดำเนินการผสานจากต้นแบบแก้ไขข้อขัดแย้งและตอนนี้ฉันมี: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | eb3b733 3 [origin/master] |/ * 38abeae 1 ตอนนี้การผสานใช้เวลาพอสมควรดังนั้นฉันจึงทำการดึงข้อมูลอีกครั้งและสังเกตว่าสาขาต้นแบบระยะไกลมีการเปลี่ยนแปลงใหม่: * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 …

7
ฉันไม่สามารถเข้าใจพฤติกรรมของคอมไพล์ rebase --onto
ฉันสังเกตว่าทั้งสองช่วงของคำสั่ง git ต่อไปนี้มีพฤติกรรมที่แตกต่างกันและฉันไม่เข้าใจว่าทำไม ฉันมีAและBสาขาที่ลงตัวกับหนึ่งcommit ---COMMIT--- (A) \ --- (B) ฉันต้องการที่จะลดBสาขาในล่าสุดA(และมีความมุ่งมั่นในBสาขา) ---COMMIT--- (A) \ --- (B) ไม่มีปัญหาถ้าผมทำ: checkout B rebase A แต่ถ้าฉันทำ: checkout B rebase --onto B A มันไม่ทำงานเลยไม่มีอะไรเกิดขึ้น ฉันไม่เข้าใจว่าทำไมทั้งสองพฤติกรรมจึงแตกต่างกัน Phpstorm git client ใช้ไวยากรณ์ตัวที่สองและดูเหมือนว่าฉันจะพังอย่างสมบูรณ์นั่นเป็นเหตุผลที่ฉันขอให้ปัญหาไวยากรณ์นี้
169 git  git-rebase 

4
git rebase โดยไม่เปลี่ยนการกระทำที่ประทับเวลา
มันจะทำให้รู้สึกถึงการปฏิบัติgit rebaseในขณะที่รักษา timestamps กระทำ? ฉันเชื่อว่าผลที่ตามมาก็คือสาขาใหม่จะไม่จำเป็นต้องมีวันที่ตามลำดับเวลา เป็นไปได้ในทางทฤษฎีหรือไม่? (เช่นใช้คำสั่งการวางท่อเพียงแค่อยากรู้อยากเห็นที่นี่) หากเป็นไปได้ในทางทฤษฎีแล้วมันเป็นไปได้ในทางปฏิบัติกับ rebase ไม่เปลี่ยน timestamps? ตัวอย่างเช่นสมมติว่าฉันมีต้นไม้ต่อไปนี้: master <jun 2010> | : : : oldbranch <feb 1984> : / oldcommit <jan 1984> ตอนนี้ถ้าฉัน rebase oldbranchบนmasterวันที่ของการกระทำการเปลี่ยนแปลงจาก feb 1984 ถึงมิถุนายน 2010 มันเป็นไปได้ที่จะเปลี่ยนพฤติกรรมนั้นเพื่อให้การประทับเวลากระทำจะไม่เปลี่ยนแปลง? ในที่สุดฉันก็จะได้รับ: oldbranch <feb 1984> / master <jun 2010> | : มันจะสมเหตุสมผลไหม? มันอนุญาตให้ในคอมไพล์มีประวัติซึ่งการคอมมิชชันเก่ามีการคอมมิทล่าสุดหรือไม่?

9
Git: วิธีการลดการกระทำที่เฉพาะเจาะจง
ฉันต้องการลดการกระทำที่เฉพาะเจาะจงไม่ใช่หัวหน้าของสาขาอื่น: A --- B --- C master \ \-- D topic ถึง A --- B --- C master \ \-- D topic แทน A --- B --- C master \ \-- D topic ฉันจะบรรลุสิ่งนั้นได้อย่างไร

5
เปลี่ยนข้อความคอมมิตเก่าใน Git
ผมพยายามที่จะแก้ไขข้อความกระทำเก่าตามที่อธิบายไว้ที่นี่ เป็นสิ่งที่ตอนนี้เมื่อฉันพยายามที่จะเรียกมันว่าrebase -i HEAD~5interactive rebase already started จากนั้นฉันลอง: git rebase --continueแต่ได้รับข้อผิดพลาดนี้: error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba fatal: Cannot lock the ref 'refs/heads/master'. ความคิดใด ๆ ?

3
ฉันจะเลือกกลยุทธ์การรวมเพื่อรีบูต git ได้อย่างไร
git-rebaseหน้าคนกล่าวสามารถส่งผ่านไป-X<option> git-mergeเมื่อไหร่ / อย่างไร ฉันต้องการรีบูตด้วยการใช้แพตช์กับกลยุทธ์แบบเรียกซ้ำและตัวเลือกของพวกเขา (ใช้สิ่งใดก็ได้แทนที่จะใช้การคอมมิชชันที่ขัดแย้งกันทั้งหมด) ฉันไม่ต้องการรวมฉันต้องการสร้างประวัติศาสตร์เชิงเส้น ฉันพยายามแล้ว: git rebase -Xtheirs และ git rebase -s 'recursive -Xtheirs' แต่คอมไพล์ปฏิเสธ-Xทั้งสองกรณี git rebase -Xtheirsทำงานในรุ่นล่าสุดยกเว้นความขัดแย้งของต้นไม้จะต้องได้รับการแก้ไขด้วยตนเอง คุณต้องเรียกใช้git rebase -Xtheirs --continue( -Xซ้ำ) หลังจากแก้ไขข้อขัดแย้งเหล่านั้นแล้ว
147 git  git-rebase 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.