git - สาขาของคุณอยู่ข้างหน้า 'origin / master' โดย 1 คอมมิต


109

ฉันเป็นมือใหม่ในคอมไพล์และฉันกำลังทำงานกับคอมไพล์

ฉันเพิ่มไฟล์บางไฟล์ในคอมไพล์:

git add <file1>
git add <file2>

จากนั้นฉันต้องการผลักดันให้มีการตรวจสอบ แต่ฉันเข้าใจผิด

git commit

ดังนั้นไฟล์ที่ฉันเปลี่ยนไปจะไม่ถูกตรวจสอบ
ตอนนี้ถ้าฉันป้อนคำสั่ง:

git status

มันบอกว่า

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

ฉันต้องการคืนค่าคอมมิตนั้นและต้องการส่งไฟล์เหล่านั้นเพื่อตรวจสอบแทนที่จะคอมมิต ใครช่วยบอกฉันหน่อยได้ไหมว่าฉันทำได้อย่างไร


หากคุณต้องการที่จะยกเลิกการกระทำของคุณ - ใช้เวลาดูที่คำถามที่คล้ายกัน
ДМИТРИЙМАЛИКОВ

1
ฉันไม่รู้ว่าคุณใช้อะไรในการตรวจสอบโค้ด คำตอบง่ายๆสำหรับคำถามง่ายๆในการยกเลิกการคอมมิตคือgit reset HEAD^
Anonymoose

ฉันรีเซ็ต HEAD แล้ว แต่เมื่อฉันพยายามที่จะผลักดันมันก็บอกว่าฉันเป็น D file1.py เมื่อฉันพยายาม psuh อีกครั้งมันบอกว่าฉันว่าสาขาของคุณอยู่ข้างหน้าต้นกำเนิด / master โดย 1 กระทำ
sam

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

รหัสของฉันจะได้รับการตรวจสอบก่อนจากนั้นจะมีการยืนยัน ก่อนอื่นฉันต้องการส่งรหัสเพื่อตรวจสอบ แต่ผิดพลาดที่ฉันได้ตกลงไว้
sam

คำตอบ:


129

คุณไม่สามารถผลักดันสิ่งที่ยังไม่ได้มุ่งมั่น ลำดับของการดำเนินการคือ:

  1. ทำการเปลี่ยนแปลงของคุณ
  2. git add - ขั้นตอนการเปลี่ยนแปลงของคุณสำหรับการกระทำ
  3. git commit - สิ่งนี้ยอมรับการเปลี่ยนแปลงทีละขั้นของคุณในเครื่อง
  4. git push - สิ่งนี้จะผลักดันการเปลี่ยนแปลงที่มุ่งมั่นของคุณไปสู่รีโมต

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

ข้อความที่คุณเห็น (สาขาของคุณอยู่ข้างหน้า 1 คอมมิต) หมายความว่าที่เก็บในเครื่องของคุณมีคอมมิตที่ยังไม่ถูกพุช

ในคำอื่น ๆ : addและcommitมีการดำเนินงานในท้องถิ่นpush, pullและfetchมีการดำเนินงานที่ทำงานกับระยะไกล

เนื่องจากดูเหมือนว่าจะมีเวิร์กโฟลว์การควบคุมแหล่งที่มาอย่างเป็นทางการในสถานที่ที่คุณทำงานอยู่คุณควรถามภายในว่าควรจัดการอย่างไร


4
อะฮะโอเค. จึงหมายถึงการกระทำหลังจากที่ผมต้องผลักดันมัน
sam

4
คำอธิบายที่ดี - ผู้ถามอาจไม่ต้องการคืนค่าคอมมิตจริง ๆ แต่ขอให้ผู้อื่นตรวจสอบคอมมิตก่อนที่จะส่งไปยังที่originเก็บ ฉันขอแนะนำให้อ่านบทช่วยสอน / บทนำสู่คอมไพล์บางส่วนในgit-scm.com/documentation
dbr

1
เมื่อสถานะคอมไพล์ของฉันระบุว่า "สาขาของคุณอยู่ข้างหน้า" ต้นทาง / พัฒนา "โดย 1 คอมมิต" ฉันจะดูได้อย่างไรว่าไฟล์มีการเปลี่ยนแปลง git diff ดูเหมือนจะไม่ทำอะไรเลย
Tom

บางครั้งก็มีคนอื่นที่ทำงานที่นั่น ดึงก่อนที่จะผลัก
Adrian P.

69

git reset HEAD^ --soft (บันทึกการเปลี่ยนแปลงของคุณกลับไปที่การกระทำล่าสุด)

git reset HEAD^ --hard (ยกเลิกการเปลี่ยนแปลงกลับไปที่การกระทำล่าสุด)


3
อะไรคือความสำคัญของหัวกับแครอท '^'? ฉันเคยเห็นมันเขียนโดยไม่ใส่แครอทด้วย
Mugen

30

หากคุณเพียงแค่ต้องการทิ้งการเปลี่ยนแปลงและเปลี่ยนกลับเป็นการคอมมิตสุดท้าย (การเปลี่ยนแปลงที่คุณต้องการแชร์):

git reset --hard HEAD~

คุณอาจต้องการตรวจสอบให้แน่ใจว่าคุณต้องการสิ่งนี้ (git log ) เพราะคุณจะสูญเสียการเปลี่ยนแปลงทั้งหมด

ทางเลือกที่ปลอดภัยกว่าคือวิ่ง

git reset --soft HEAD~ # reset to the last commit
git stash              # stash all the changes in the working tree 
git push               # push changes 
git stash pop          # get your changes back 

21

ฉันแก้ไขสิ่งนี้ได้โดยใช้งานง่ายๆ:

git pull

ไม่มีอะไรมาก ตอนนี้กำลังแสดง:

# On branch master
nothing to commit, working directory clean

อาจทำให้เกิดปัญหาได้หากมีสาขาที่สร้างขึ้นมากกว่าหนึ่งสาขาซึ่งไม่จำเป็น
Anil Kumar Arya

1
คุณกลับไปอยู่ในสถานะห่างไกลและสูญเสียงานล่าสุดของคุณ: D
Gucho Ca

13

git รีเซ็ต HEAD ^

จากนั้นไฟล์ที่แก้ไขจะปรากฏขึ้น

คุณสามารถย้ายไฟล์ที่แก้ไขไปยังสาขาใหม่ได้

ใช้,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

จากนั้นคุณควรอยู่ในสาขาที่สะอาดและการเปลี่ยนแปลงของคุณควรถูกเก็บไว้ในสาขาใหม่ คุณสามารถรวมการเปลี่ยนแปลงนี้เข้ากับสาขาหลักได้ในภายหลัง


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