กำลังพยายามดึงไฟล์จากที่เก็บ Github ของฉัน:“ ปฏิเสธที่จะรวมประวัติที่ไม่เกี่ยวข้อง”


151

ฉันเรียน git และฉันกำลังติดตามหนังสือชุมชน Git

ก่อนหน้านี้ (นานมาแล้ว) ฉันสร้างที่เก็บข้อมูลสาธารณะบน Github ด้วยไฟล์บางไฟล์ ตอนนี้ฉันตั้งค่าที่เก็บ Git ในเครื่องบนคอมพิวเตอร์ปัจจุบันของฉันและส่งไฟล์บางไฟล์ จากนั้นฉันเพิ่มรีโมตชี้ไปที่หน้า Github ของฉัน:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

ดูเหมือนว่าจะประสบความสำเร็จ:

[root@osboxes c]# git remote show learnc
* remote learnc
  Fetch URL: https://github.com/michaelklachko/Learning-C
  Push  URL: https://github.com/michaelklachko/Learning-C
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (local out of date)

ตอนนี้ฉันต้องการดาวน์โหลดไฟล์จาก repo Github ของฉันไปยังคอมพิวเตอร์ของฉัน ฉันทำอย่างนี้:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

อย่างไรก็ตามฉันไม่เห็นไฟล์ใหม่ในไดเรกทอรีท้องถิ่นของฉัน ฉันจะรับมันได้อย่างไร

ฉันยังพยายามทำเช่นนี้:

[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

BTW ในพื้นที่ฉันอยู่ในสาขาหลัก (ไม่มีสาขาอื่น):

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean

4
เมื่อคุณตั้งค่า repo ท้องถิ่นของคุณคุณไม่โคลน repo Github คุณหรือเพียงแค่ไม่git init? ในกรณีหลัง repos เหล่านั้นไม่เกี่ยวข้องกัน (ไม่มีข้อผูกมัดทั่วไป) และคุณไม่สามารถรวมมันได้ (pull คือ fetch + merge)
Paul

ฉันทำคอมไพล์แล้ว ดังนั้นฉันควรโคลน repo Github ของฉันเพื่อแก้ไขปัญหานี้หรือไม่
MichaelSB

1
คุณสามารถโคลน repo Github ของคุณและทำงานต่อไปได้ แต่มันจะยังคงเป็น repo แยกต่างหาก คุณต้องการรวมสองประวัติที่ไม่เกี่ยวข้องเข้าด้วยกันหรือไม่?
พอล

ฉันเดาว่าฉันต้องการรวมประวัติ แต่จริงๆแล้วฉันแค่ต้องการรวมไฟล์ทั้งในเครื่องและบน GitHub ฉันหมายถึงฉันไม่สนใจประวัติของไฟล์เก่าที่ฉันมีใน Github จริงๆ
MichaelSB

คำตอบ:


315

ลอง --allow-unrelated-histories

เช่นเดียวกับ max630 แสดงความคิดเห็นหรือตามที่อธิบายไว้ที่นี่Git ปฏิเสธที่จะรวมประวัติที่ไม่เกี่ยวข้อง


1
ตามที่ระบุไว้ในบันทึกประจำรุ่น GitHub
systemaddict

เหตุใดจึงไม่มีตัวเลือกการตั้งค่าให้ตั้งค่านี้ตลอดเวลา ทุกครั้งที่ฉันต้องตามล่าตัวเลือกนี้ ฉันทำงานกับคอมไพล์มาแล้วตั้งแต่ 2k8 และฉันก็รู้สึกหงุดหงิดกับการรับเลี้ยงเด็กนี้ ตัวเลือกที่โง่ไม่ได้มีเสมอ อย่างน้อยข้อความปฏิเสธควรมีการแทนที่ที่จะใช้
nyov


39

ในขณะที่ฉันทั้งหมดสำหรับการปลดล็อคปัญหาการทำงานของผู้คนฉันไม่คิดว่า "push --force" หรือ "--allow_unrelated_histories" ควรได้รับการสอนให้ผู้ใช้ใหม่เป็นวิธีการแก้ปัญหาทั่วไปเพราะพวกเขาสามารถทำให้เกิดความเสียหายจริงไปยังที่เก็บ โดยไม่เข้าใจว่าทำไมสิ่งต่าง ๆ ไม่ทำงานตั้งแต่แรก

เมื่อคุณมีสถานการณ์เช่นนี้ซึ่งคุณเริ่มต้นด้วยที่เก็บในตัวเครื่องและต้องการสร้างรีโมตบน GitHub เพื่อแบ่งปันงานของคุณด้วยมีบางสิ่งที่ต้องระวัง

เมื่อคุณสร้างพื้นที่เก็บข้อมูลออนไลน์ใหม่มีตัวเลือก "เริ่มต้นพื้นที่เก็บข้อมูลนี้ด้วย README" หากคุณอ่านงานพิมพ์ละเอียดจะมีข้อความระบุว่า "ข้ามขั้นตอนนี้หากคุณกำลังนำเข้าที่เก็บข้อมูลที่มีอยู่"

คุณอาจทำเครื่องหมายในช่องนั้น หรือในทำนองเดียวกันคุณเพิ่ม / กระทำออนไลน์ก่อนที่จะพยายามเริ่มต้น สิ่งที่เกิดขึ้นคือคุณสร้างประวัติการกระทำที่ไม่เหมือนใครในแต่ละสถานที่และพวกเขาจะไม่สามารถคืนดีได้หากไม่ได้รับค่าเผื่อพิเศษตามที่ระบุไว้ในคำตอบของ Nevermore (เพราะคอมไพล์ไม่ต้องการให้คุณใช้วิธีนั้น) คุณสามารถทำตามคำแนะนำที่กล่าวถึงในที่นี้หรือเพียงแค่ไม่ตรวจสอบตัวเลือกนั้นในครั้งต่อไปที่คุณต้องการเชื่อมโยงไฟล์บางไฟล์กับรีโมตใหม่ รักษาระยะไกลให้สะอาดสำหรับการกดครั้งแรก

การอ้างอิง: ประสบการณ์ครั้งแรกของฉันกับ git + hub คือเจอปัญหาเดียวกันนี้และเรียนรู้มากมายเพื่อทำความเข้าใจว่าเกิดอะไรขึ้นและทำไม


12

หากไม่มีประวัติที่สำคัญในปลายด้านหนึ่ง (aka ถ้ามันเป็น readme เพียงครั้งเดียวที่กระทำบนปลาย github) ฉันมักจะพบว่าง่ายกว่าที่จะคัดลอก readme ไปยัง repo ในพื้นที่ของฉันและทำgit push -fเพื่อทำให้รูทใหม่ของคอมมิท .

ฉันพบว่ามันซับซ้อนน้อยกว่าเล็กน้อยโดยไม่จำเป็นต้องจดจำธงที่คลุมเครือและทำให้ประวัติสะอาดขึ้นเล็กน้อย


11

ในสาขาของคุณ - พูดหลักดึงและอนุญาตให้มีประวัติที่ไม่เกี่ยวข้อง

git pull origin master --allow-unrelated-histories

ทำงานให้ฉัน


1
คำสั่งนี้เป็นคำสั่งที่คุณต้องยอมรับในการเพิ่ม License หรือ ReadMe เมื่อสร้าง repo ดั้งเดิมใน Github
F1Linux

4

ดำเนินการคำสั่งต่อไปนี้:

git pull origin master --allow-unrelated-histories

เสียงเรียกเข้าแบบผสานจะเปิดขึ้น เพิ่มข้อความที่ผสานและ:

  1. กด ESC
  2. กด Shift + ';'
  3. กด 'w' แล้วกด 'q'

และคุณจะไปดี


3

เมื่อฉันใช้--allow-unrelated-historiesคำสั่งนี้สร้างความขัดแย้งมากเกินไป มีความขัดแย้งในไฟล์ที่ฉันไม่ได้ทำงาน เพื่อให้ได้ข้อผิดพลาด" Refusing to merge unrelated histories"ฉันใช้คำสั่ง rebase:

git pull --rebase=preserve --allow-unrelated-histories

หลังจากนี้คอมมิตการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดด้วยข้อความคอมมิต สุดท้ายให้รันคำสั่งต่อไปนี้:

git rebase --continue

หลังจากนี้สำเนาการทำงานของฉันเป็นรุ่นล่าสุดพร้อมด้วยสำเนาระยะไกลและฉันสามารถผลักดันการเปลี่ยนแปลงได้เหมือนเมื่อก่อน ไม่มีข้อผิดพลาดประวัติที่ไม่เกี่ยวข้องในขณะดึง


1
รุ่นจริง: git pull --rebase=merge --allow-unrelated-historiesตามที่--rebase=preserveคัดค้านgit-scm.com/docs/git-pull#Documentation/ …
Luckylooke

0

ในกรณีของฉันกำลังเผชิญกับปัญหาเดียวกันโดยเฉพาะคำขอดึงครั้งแรกที่พยายามหลังจากเพิ่มที่เก็บ Git จากระยะไกล ข้อผิดพลาดต่อไปนี้กำลังเผชิญ

fatal: refusing to merge unrelated histories on every try

ใช้คำสั่ง --allow-unrelated-histories มันทำงานได้อย่างสมบูรณ์

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