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

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

6
เหตุใด git-rebase จึงทำให้ฉันมีข้อขัดแย้งในการรวมเมื่อสิ่งที่ฉันทำคือการแบน
เรามีพื้นที่เก็บข้อมูล Git ที่มีการกระทำมากกว่า 400 ครั้งสองสามคู่แรกนั้นมีการทดลองและข้อผิดพลาดมากมาย เราต้องการที่จะทำความสะอาดการกระทำเหล่านี้โดยการบีบลงไปในการกระทำเดียว ตามธรรมชาติแล้วการรีต git-reb ดูเหมือนจะเป็นไป ปัญหาของฉันคือมันจบลงด้วยการรวมความขัดแย้งและความขัดแย้งเหล่านี้ไม่ใช่เรื่องง่ายที่จะแก้ไข ฉันไม่เข้าใจว่าทำไมจึงควรมีข้อขัดแย้งใด ๆ เนื่องจากฉันเพิ่งจะคอมมิชชัน (ไม่ลบหรือจัดเรียงใหม่) เป็นไปได้อย่างมากที่สิ่งนี้แสดงให้เห็นว่าฉันไม่ได้เข้าใจอย่างสมบูรณ์ว่าการทำ git-rebase นั้นทำได้อย่างไร นี่คือสคริปต์ที่ฉันใช้อยู่เวอร์ชันที่แก้ไข: repo_squash.sh (นี่คือสคริปต์ที่ทำงานจริง): rm -rf repo_squash git clone repo repo_squash cd repo_squash/ GIT_EDITOR=../repo_squash_helper.sh git rebase --strategy theirs -i bd6a09a484b8230d0810e6689cf08a24f26f287a repo_squash_helper.sh (สคริปต์นี้ใช้โดย repo_squash.sh เท่านั้น): if grep -q "pick " $1 then # cp $1 …

2
คุณจะลดการเปลี่ยนแปลงของสาขาปัจจุบันบนการเปลี่ยนแปลงที่ถูกผสานได้อย่างไร
ตกลง. ถ้าฉันอยู่ในสาขา (พูดworking) และฉันต้องการที่จะรวมในการเปลี่ยนแปลงจากสาขาอื่น (พูดmaster) แล้วฉันจะเรียกใช้คำสั่งgit-merge masterในขณะที่อยู่ในworkingสาขาและการเปลี่ยนแปลงที่ได้รับการผสานโดยไม่ต้องลดประวัติศาสตร์เลย ถ้าฉันทำงานgit-rebase masterแล้วการเปลี่ยนแปลงในmasterนั้นจะถูก rebased เพื่อวางไว้ด้านบนของworkingสาขาของฉัน แต่ถ้าฉันต้องการที่จะรวมในการเปลี่ยนแปลงจากmasterแต่รีบูตการเปลี่ยนแปลงของฉันworkingให้อยู่ด้านบน ฉันจะทำอย่างไร มันสามารถทำได้? ฉันสามารถทำงานgit-rebase workingบนmasterสาขาของฉันเพื่อให้การเปลี่ยนแปลงของฉันอยู่ด้านบนในmasterสาขา แต่ฉันต้องการที่จะสามารถทำเช่นนั้นในworkingสาขาของฉันและฉันไม่ทราบวิธี สิ่งที่ใกล้เคียงที่สุดที่ฉันสามารถนึกได้คือการสร้างสาขาใหม่จากmasterนั้นจึงworkingทำการเปลี่ยนแปลงของสิ่งที่อยู่ด้านบน แต่จากนั้นฉันก็จะมีสาขาใหม่แทนที่จะเปลี่ยนworkingสาขา
144 git  merge  rebase  git-rebase 

9
กำลังดำเนินการ rebase ไม่สามารถคอมมิต จะดำเนินการหรือหยุด (ยกเลิก) อย่างไร?
เมื่อฉันวิ่ง: git status ฉันเห็นสิ่งนี้: rebase in progress; onto 9c168a5 You are currently rebasing branch 'master' on '9c168a5'. (all conflicts fixed: run "git rebase --continue") nothing to commit, working directory clean เมื่อฉันทำ: ls `git rev-parse --git-dir` | grep rebase || echo no rebase ฉันเห็น: rebase-apply ฉันไม่สามารถยอมรับที่มา git branch แสดงให้เห็นว่า: * (no …
140 git  git-rebase 

4
วิธีการยกเลิก rebit คอมไพล์จากภายในเป็นกลุ่มในระหว่างการแก้ไขแบบโต้ตอบ
เมื่อฉันทำ rebase เชิงโต้ตอบเช่น git rebase -i HEAD~3 ตัวแก้ไขการโต้ตอบ rebase (เป็นกลุ่มในกรณีของฉัน) เปิดขึ้นเพื่อให้ฉันแก้ไขการกระทำเพื่อ rebase pick c843ea2 Set Vim column limit to 80 (OS X) pick fc32eac Add Bash alias for `pbcopy` (OS X) .... ถ้าตอนนี้ฉันตัดสินใจแล้วว่าฉันต้องการยกเลิก rebase และออกเป็นกลุ่มโดยใช้:qrebase เริ่มต้นต่อไป ฉันใช้เวอร์ชั่นคอมไพล์1.9.0.msysgit.0บน windows แน่นอนว่าฉันสามารถลบทุกpickบรรทัดได้ แต่มันอาจจะเป็นเรื่องที่ต้องทำมากมายหากฉันรีบูตประวัติศาสตร์ที่ยาวนานกว่า มีวิธีอื่นอีกไหม? ฉันจะออกจากตัวแก้ไขการโต้ตอบ rebase (กลุ่ม) และยกเลิกการยกเลิกได้อย่างไร
138 git  vim  git-rebase 

1
ฉันจะ git rebase คอมมิตแรกได้อย่างไร
ฉันเคยgit initสร้าง repo ใหม่จากนั้นทำสามคอมมิต ตอนนี้ฉันต้องการ rebase เพื่อกลับไปแก้ไขคอมมิตแรกของฉัน แต่ถ้าฉันทำgit rebase -i HEAD~3มันจะบ่น! ถ้าฉันลองเหมือนกันHEAD~2มันก็ใช้ได้ แต่ให้ฉันจัดเรียงคอมมิตสองครั้งสุดท้ายเท่านั้น ฉันจะอ้างถึง 'การกระทำก่อนที่จะมีการกระทำใด ๆ ' ได้อย่างไรหรือย้อนกลับและแทรกการกระทำที่ว่างเปล่า
132 git  git-rebase 

4
Git rebase merge ขัดแย้งไม่สามารถดำเนินการต่อได้
ฉันพยายาม rebase 'dev' เพื่อให้ทันกับสาขา 'master' $ git checkout dev $ git rebase master First, rewinding head to replay your work on top of it... Applying: Corrected compilation problems that came from conversion from SVN. Using index info to reconstruct a base tree... M src/com/.... <stdin>:125: trailing whitespace. /** <stdin>:126: trailing …
131 git  git-rebase 

6
ไม่สามารถผลักดันไปยังสาขาหลังจากรีบูต
เราใช้คอมไพล์และมีสาขาหลักและสาขานักพัฒนาซอฟต์แวร์ ฉันต้องเพิ่มฟีเจอร์ใหม่แล้วจึงทำการ rebit to master จากนั้นพุช master ไปที่เซิร์ฟเวอร์ CI ปัญหาคือว่าถ้าฉันมีข้อขัดแย้งระหว่างการรีบูตฉันไม่สามารถผลักดันไปยังสาขานักพัฒนาซอฟต์แวร์ระยะไกลของฉัน (บน Github) หลังจากการรีบูตเสร็จสมบูรณ์จนกว่าฉันจะดึงสาขาระยะไกลของฉัน ทำให้การกระทำที่ซ้ำกัน เมื่อไม่มีความขัดแย้งทำงานตามที่คาดไว้ คำถาม: หลังจากการรีบูตและการแก้ไขข้อขัดแย้งฉันจะซิงค์สาขานักพัฒนาซอฟต์แวร์ในพื้นที่และระยะไกลได้อย่างไรโดยไม่ต้องสร้างการคอมมิทซ้ำ ติดตั้ง: // master branch is the main branch git checkout master git checkout -b myNewFeature // I will work on this at work and at home git push origin myNewFeature // work work …

3
ฉันจะเปลี่ยนข้อความคอมมิตคอมครั้งแรกได้อย่างไร
ฉันมีต้นไม้ทำงานที่มี 3 คอมมิชชั่น: ➜ ~ myproject git: (หลัก) git log commit a99cce8240495de29254b5df8745e41815db5a75 Author: My Name <my@mail.com> Date: Thu Aug 16 00:59:05 2012 +0200 .gitignore edits commit 5bccda674c7ca51e849741290530a0d48efd69e8 Author: My Name <my@mail.com> Date: Mon Aug 13 01:36:39 2012 +0200 Create .gitignore file commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3 Author: My Name <my@mail.com> Date: Mon Aug …

1
ความแตกต่างระหว่าง git pull --rebase และ git pull --ff-only
สมมติว่าorigin/masterมีการกระทำA--B--Cของฉันและมีการกระทำlocal/masterA--B--D จะเกิดอะไรขึ้นถ้าฉันใช้git pull --rebase? จะเกิดอะไรขึ้นถ้าฉันใช้git pull --ff-only? มีความแตกต่างในโครงสร้างการคอมมิตที่เกิดขึ้นหรือไม่?
116 git  git-rebase  git-pull 

2
Git rebase ล้มเหลว 'การเปลี่ยนแปลงในเครื่องของคุณในไฟล์ต่อไปนี้จะถูกเขียนทับโดยการผสาน' ไม่มีการเปลี่ยนแปลงในท้องถิ่น?
นี่คือการถอดเสียงของฉันจากการพยายามรวมสาขา bugfix เข้ากับสาขาหลักของฉันเพื่อเตรียมพร้อมที่จะผลักดันมันต้นน้ำ มีการเปลี่ยนแปลงต้นน้ำบางอย่างที่ดึงมาเป็นหลักตั้งแต่สร้างสาขาแก้ไขข้อบกพร่องและตอนนี้ปฏิเสธที่จะตั้งฐานใหม่ ไฟล์ที่แสดงข้อผิดพลาดจะไม่แตกต่างกันเมื่อเปิด ไม่มีการเพิ่มลบหรือเปลี่ยนชื่อไฟล์ ไม่มีสิ่งใดถูกละเลยและไม่มีการติดตามหรือจัดฉากหรือไม่มีการจัดฉาก ฉันอึ้งไปเลยว่าทำไมการรีเบสจึงล้มเหลว ฉันใช้ OS X 10.6.6 และ git 1.7.4 .-(/Volumes/joshua/www/txfunds)-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------(joshua@Kusanagi)- `--> git rebase bug586-test master-test First, rewinding head to replay your work on top of it... Applying: - comiitting code related to api permissions Using index info to reconstruct a base tree... Falling back …
104 git  git-rebase 

4
Git: จะใช้ซ้ำ / เก็บข้อความคอมมิตหลังจาก 'git reset' ได้อย่างไร?
ในฐานะที่เป็นผู้ใช้ Git ฉันมักจะเจอสถานการณ์นี้ฉันจึงจำเป็นต้องทำการคอมมิตใหม่อย่างน้อยหนึ่งครั้งในลักษณะที่ไม่เข้ากับ--amendหรือrebase -iกับการแก้ไข โดยปกติฉันจะทำอะไรบางอย่างเช่น git reset HEAD~1 # hack, fix, hack git commit -a # argh .. do I need to retype my message? ฉันใช้ข้อความคอมมิตที่มีเหตุผลค่อนข้างจริงจัง โดยทั่วไปจะมีข้อความขนาดใหญ่พร้อมการอ้างอิงและเหตุผลสำหรับการเปลี่ยนแปลง จนถึงขณะนี้ผมรำคาญมากในกระบวนการที่มีความยาวในการกู้คืนกระทำข้อความเก่าของฉันผ่านไม่ได้เรียงลำดับgit reflog, git logและคัดลอกและวางกระบวนการ มีวิธีที่ดีกว่าในการจัดการกับสิ่งนี้หรือไม่? และจะเป็นอย่างไรถ้าฉันประกอบด้วยมากกว่าหนึ่งการกระทำ? แก้ไข:หลังจากคิดเกี่ยวกับสิ่งนี้เล็กน้อยฉันคิดว่าสิ่งที่ฉันกำลังมองหาคือฟังก์ชันการทำงานที่เหมือนgit stash -like สำหรับส่งข้อความที่แก้ไข / แก้ไขคอมมิชชันไม่เหมาะสม

4
เปลี่ยนการประทับเวลาขณะที่ rebasing git branch
ฉันได้จัดโครงสร้างคอมมิตใหม่ในสาขาก่อนที่จะเปิดเผยต่อสาธารณะทำให้การประทับเวลาของการคอมมิตเป็นแบบผสมกัน ฉันอยากจะให้พวกเขาทั้งหมดเป็นวันนี้โดยใช้เวลาเพียงไม่กี่วินาทีเท่านั้น เห็นได้ชัดว่าการประทับเวลาเหล่านี้จะไม่ถูกต้องเช่นกัน แต่เนื่องจากเป็นเวลาที่สิ่งต่างๆออกสู่สาธารณะฉันจึงชอบสิ่งนั้นมากกว่าประวัติศาสตร์ที่ผสมผสานกันเวลาที่ชาญฉลาด แล้วฉันจะบอกให้คอมไพล์สร้างการประทับเวลาใหม่ในขณะที่รีเบตได้อย่างไร
100 git  git-rebase 

4
git ลบการผสานรวมออกจากประวัติ
ประวัติ Git ของฉันมีลักษณะดังนี้: ฉันต้องการที่จะสควอชสีม่วงเป็นหนึ่งเดียว ฉันไม่ต้องการเห็นพวกเขาอีกแล้วในบันทึกการกระทำของฉัน ฉันพยายามทำ a git rebase -i 1แล้ว แต่ถึงแม้ว่าจะ1อยู่บนกิ่งไม้สีน้ำเงิน (ภาพเปรียบเทียบ) ฉันก็ยังเห็นทุกข้อตกลงในสาขาสีม่วงของฉัน ฉันจะลบสาขาสีม่วงทั้งหมด (จากบันทึกการคอมมิต) ได้อย่างไร

3
ฉันต้องการป๊อปอัปและทิ้งคอมมิต "กลาง" ในสาขาหลักของฉัน ฉันจะทำมันได้อย่างไร?
ตัวอย่างเช่นในสาขาหลักต่อไปนี้ฉันต้องทิ้งเฉพาะการกระทำ af5c7bf16e6f04321f966b4231371b21475bc4da ซึ่งเป็นครั้งที่สองเนื่องจาก rebase ก่อนหน้านี้: commit 60b413512e616997c8b929012cf9ca56bf5c9113 Author: Luca G. Soave <luca.soave@gmail.com> Date: Tue Apr 12 23:50:15 2011 +0200 add generic config/initializers/omniauth.example.rb commit af5c7bf16e6f04321f966b4231371b21475bc4da Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 00:15:50 2011 +0200 show github user info if logged commit e6523efada4d75084e81971c4dc2aec621d45530 Author: Luca G. Soave <luca.soave@gmail.com> Date: …

6
ฉันจะใช้ git rebase โดยไม่ต้องกดบังคับได้อย่างไร
ในความพยายามที่จะบรรลุมรรคผลนิพพานฉันใช้เวลาทั้งวันในการเรียนรู้วิธีใช้ประโยชน์จาก rebase สำหรับสถานการณ์ที่ฉันรวมอยู่ในปัจจุบัน เมื่อเรียกใช้สิ่งที่ฉันคิดว่าเป็นขั้นตอน git 101 (ซึ่งฉันสะกดไว้ด้านล่าง) ฉันต้องทำpush --forceเมื่อผลักการเปลี่ยนแปลงกลับไปที่จุดเริ่มต้น ฉันไม่ใช่คนเดียว - ฉันรู้ว่าสิ่งนี้ถูกปกคลุมไปด้วยพื้น (ดู1 , 2 , 3 , 4 , 5 ) และฉันเข้าใจเหตุผลทางเทคนิคว่าทำไมต้องมีกองกำลัง ปัญหาของฉันคือ - มีรายการบล็อกจำนวนมาก (หลายรายการ) ที่ร้องเพลงสรรเสริญ rebase และการเปลี่ยนแปลงชีวิตของพวกเขา (ดู1 , 2 , 3 , 4เพื่อแสดงรายการบางส่วน) แต่ไม่มีรายการใดที่กล่าวถึงซึ่งpush --forceเป็นส่วนหนึ่งของ กระแสของพวกเขา อย่างไรก็ตามเกือบทุกคำตอบสำหรับคำถาม stackoverflow ที่มีอยู่จะบอกว่า "ใช่ถ้าคุณจะปรับฐานใหม่ก็ต้องใช้push --force" ได้รับหมายเลขและศาสนาประชาสัมพันธ์ rebase ที่ฉันต้องเชื่อว่าการใช้ 'ดัน --force' …
94 git  git-rebase 

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