“ การเปลี่ยนแปลงที่ไม่ได้จัดทำไว้สำหรับการกระทำ” หมายถึงอะไร


239

ฉันคิดว่าถ้าคุณต้องการติดตามไฟล์ที่คุณควร git add [files you want to track]

Changes not staged for commitผมไม่ทราบว่าทำไมผมได้รับข้อความ

หากไฟล์เหล่านั้นไม่ถูกจัดฉากไม่ควรgitแสดงให้ฉันเห็นว่าไฟล์เหล่านั้นเป็น Untrackedแบบนั้น

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่ฉันทำคือสร้างคุณสมบัติใหม่จาก developสาขาและทำงานในfeature/change_excel_formatสาขา

ฉันคิดว่าไฟล์เหล่านั้นควรอยู่ใน stagedสถานะ

แต่git statusบอกฉันChanges not staged for commit

ป้อนคำอธิบายรูปภาพที่นี่

สั้นฉันเท่านั้นรู้ว่ามี 3 ขั้นตอนในการคอมไพล์ untracked, staged,committed คนใดคนหนึ่งสามารถบอกสิ่งที่เป็นเวทีสำหรับChanges not staged for commit ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นหากฉันแก้ไขไฟล์ a (แล้วใน repo)

และประเภท git stคอมไพล์จะบอกฉันChanges not staged for commit

ถ้าฉัน git aแล้วไฟล์aจะเป็นสิ่งต่อไปนี้staged status

หากฉันแก้ไขfile aตอนนี้จะมีสถานะสองสถานะคือfile aในgitใช่มั้ย?

ดังนั้นฉันต้องตัดสินใจว่าstaged aจะทำการหรือทำnot stage aฉากเวทีแล้วฉากก่อนหน้านี้file aจะถูกยกเลิกหรือไม่

ป้อนคำอธิบายรูปภาพที่นี่


3
หากได้รับข้อความนี้และคุณต้องการให้ไฟล์นี้ (a) ต้องยอมรับหรือไม่ให้แน่ใจว่าคุณอยู่ในเส้นทางไดเรกทอรีที่ถูกต้อง (เส้นทางของโครงการเพื่อเพิ่มทั้งหมด) ในขณะที่คุณคอมไพล์เพิ่ม
Sadee

คำตอบ:


325

เมื่อคุณเปลี่ยนไฟล์ที่มีอยู่ในพื้นที่เก็บข้อมูลแล้วคุณจะต้องไปที่git addไฟล์นั้นอีกครั้งหากคุณต้องการให้ไฟล์เป็นฉาก

สิ่งนี้ช่วยให้คุณสามารถกระทำได้เพียงบางส่วนของการเปลี่ยนแปลงที่คุณทำตั้งแต่การกระทำครั้งสุดท้าย ตัวอย่างเช่นสมมติว่าคุณมีไฟล์aไฟล์และแฟ้มb cคุณแก้ไขไฟล์aและไฟล์bแต่การเปลี่ยนแปลงมีความแตกต่างกันมากและคุณไม่ต้องการให้ไฟล์เหล่านั้นเป็นไฟล์เดียว คุณออก

git add a
git commit a -m "bugfix, in a"
git add b
git commit b -m "new feature, in b"

ในฐานะที่เป็นบันทึกด้านข้างหากคุณต้องการที่จะส่งมอบทุกสิ่งที่คุณสามารถพิมพ์ได้

git commit -a

หวังว่ามันจะช่วย


1
ดังนั้นหากไฟล์เหล่านั้นเป็น alreday ใน repo และฉันได้เปลี่ยนพวกเขาฉันยังสามารถgit commit THEMโดยตรงโดยไม่ต้องเพิ่มพวกเขาใช่มั้ย
newBike

1
แน่นอน. และในกรณีนั้นเฉพาะไฟล์ที่อยู่ในรายการเท่านั้นที่จะถูกคอมมิตโดยไม่คำนึงถึงสถานะของการเปลี่ยนแปลงในไฟล์ต่าง
Stefano Falasca

1
ฉันมีปัญหาเดียวกัน แต่ปัญหาของฉันก็เกี่ยวกับสาเหตุที่ส่งไฟล์ที่ไม่ได้ติดตาม ดังนั้นในไดเรกทอรีย่อยของฉันฉันยังเพิ่มการเปลี่ยนแปลงทั้งหมดด้วย git และปัญหาได้หายไป
elia

1
ฉันทำไปแล้วgit clean -fdและยังได้รับสิ่งนี้ ฉันต้องการกำจัดการเปลี่ยนแปลงทั้งหมด ฉันควรทำอะไรอีก
ฮันนี่

3
git commit -aไม่ได้กระทำทุกอย่างเฉพาะไฟล์ที่อัปเดตไม่ได้เป็นคนใหม่ ...
มาร์ติน

62

คุณต้องใช้ git add เพื่อจัดลำดับพวกมันมิเช่นนั้นจะไม่คอมมิท รับไปว่ามันแจ้ง git ซึ่งเป็นความเปลี่ยนแปลงที่คุณต้องการจะทำ

git add -u :/เพิ่มการเปลี่ยนแปลงไฟล์ที่ถูกแก้ไขทั้งหมดลงในสเตจ git add * :/เพิ่มการแก้ไขและไฟล์ใหม่ใด ๆ (นั่นไม่ใช่ gitignore'ed) ไปยังสเตจ


2
คำตอบนี้ชัดเจนและรัดกุมเมื่อเปรียบเทียบกับข้างต้นนั่นคือเหตุผลที่ฉันรักมัน ;)
oaxacamatt

13

เป็นอีกวิธีหนึ่งในการบอก Git:

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

การเปลี่ยนแปลงไฟล์จะไม่ถูกจัดฉากหากคุณไม่ชัดเจน git addพวกเขา (และความรู้สึกนี้ทำให้)

ดังนั้นเมื่อคุณgit commitการเปลี่ยนแปลงเหล่านั้นจะไม่ถูกเพิ่มเนื่องจากไม่มีการจัดฉาก หากคุณต้องการคอมมิทพวกเขาคุณต้องสเตจพวกเขาก่อน (เช่น. git add)


2
แต่ฉันไม่ได้เปลี่ยนไฟล์ที่อ้างอิง
Eoin

1
ฉันไม่เข้าใจว่าพฤติกรรมนี้เหมาะสมหรือไม่ หากฉันบอกให้ Git ติดตามไฟล์ด้วยการทำadd .เมื่อฉันตั้งค่าการ repostiry ใหม่และสามารถตรวจพบว่าฉันได้ทำการเปลี่ยนแปลงมันทำไมฉันต้องเพิ่มไฟล์อย่างชัดเจนทุกครั้งที่ฉันส่ง? เพียงเพื่อให้การเปลี่ยนแปลงไปยังไฟล์ที่ผมต้องadd, และcommit pushแบ่งเขตระหว่างcommitและผลักดันทำให้รู้สึกถึงฉันแบ่งเขตระหว่างaddและcommitดูเหมือนว่าซ้ำซ้อนขัน
โพร

1
@Hashim ฉันเห็นด้วยฉันไม่เข้าใจตรรกะจริงๆ
Herman Toothrot

6

ทำตามขั้นตอนด้านล่าง:

1- git stash
2- git add
3- คอมไพล์กระทำ -m "ข้อความกระทำของคุณ"


5
git stash ลบการเปลี่ยนแปลงทั้งหมดของฉันมีเวลาทำงาน 10 ชั่วโมง :(
viniciussvl

13
หากคุณใช้ "git stash" มันทำให้การเปลี่ยนแปลงเหล่านั้นเป็น "สถานที่ชั่วคราว" เพื่อให้พวกเขากลับมาเพียงพิมพ์ "git stash pop" เพื่อรับการเปลี่ยนแปลงของคุณจาก "สถานที่ชั่วคราว"
Cyrus Zei

12
อย่าใช้คอมโบ git จนกว่าคุณจะอ่าน @viniciussvl และความคิดเห็นของไซรัส
โทรม

1
ทำไมฉันถึงใช้ git stash ในกรณีนี้ด้วย?
Tobias Kaufmann

4

สนับสนุนคุณบันทึกการเปลี่ยนแปลงไฟล์ใหม่ (navbar.component.html เป็นต้น)

วิ่ง:

ng status
modified:   src/app/components/shared/navbar/navbar.component.html

หากคุณต้องการอัปโหลดการเปลี่ยนแปลงเหล่านั้นสำหรับไฟล์นั้นคุณต้องเรียกใช้:

git add src/app/components/shared/navbar/navbar.component.html

แล้ว:

git commit src/app/components/shared/navbar/navbar.component.html -m "new navbar changes and fixes"

แล้ว:

git push origin [your branch name, usually "master"]

-------------------------------------------------- -------------

หรือถ้าคุณต้องการอัปโหลดการเปลี่ยนแปลงทั้งหมดของคุณ (หลายไฟล์ / ทั้งหมด):

git commit -a

และสิ่งเหล่านี้จะปรากฏขึ้น "โปรดป้อนข้อความยืนยันการเปลี่ยนแปลงของคุณ"

  • คุณจะเห็นข้อความนี้หากคอมมิทกระทำโดยไม่มีข้อความ (-m)
  • คุณสามารถออกไปได้ด้วยสองขั้นตอน:
  • 1.a. พิมพ์ข้อความแบบหลายบรรทัดเพื่อย้าย foward ด้วยการส่ง
  • 1.b. เว้นว่างไว้เพื่อยกเลิกการคอมมิชชัน
    1. กด "esc" แล้วพิมพ์ ": wq" แล้วกด Enter เพื่อบันทึกตัวเลือกของคุณ Viola!

แล้ว:

git push

และไวโอล่า!


2
เช่นเดียวกับที่ฉันได้กล่าวไว้ข้างต้น: git commit -aไม่ได้อัปโหลดการเปลี่ยนแปลง แต่ไม่รวมไฟล์ใหม่ มันจะกระทำการปรับปรุงไฟล์ที่มีอยู่เท่านั้น
Martin

3

ลองทำตามวิธีการทุบตี int git

1git add -u :/

2git commit -m "your commit message"

  1. git push -u origin master

หมายเหตุ: หากคุณยังไม่ได้เริ่มต้น repo ของคุณ

ก่อนอื่นเลย

git init 

และทำตามขั้นตอนดังกล่าวข้างต้นตามลำดับ สิ่งนี้ใช้ได้สำหรับฉัน


ปัญหานี้ใช้งานได้สำหรับฉันในข้อขัดแย้ง git ที่ฉันไม่สามารถลบไฟล์ออกจากที่เก็บในเครื่องของฉันและส่งจากที่เก็บในเครื่องไปยังสาขาต้นแบบระยะไกล
Siwoku Adeola

1

หมายความว่าพวกเขาจะไม่ถูกเพิ่มเข้ามาคุณจะต้องทำการเพิ่ม git script / excel_parser.py และชอบไล่ออกพวกเขา .. เมื่อพวกเขาถูก staged เมื่อคุณทำสถานะ git พวกเขาจะถูกจัดฉากและคอมมิทคอมจะยอมรับพวกเขา

จากคุณสามารถคอมไพล์ยอมรับ -a -m "all checkin" ที่จะจัดลำดับและส่งไฟล์ทั้งหมดในทรีโดยอัตโนมัติ


1

คุณอาจเห็นข้อผิดพลาดนี้เมื่อคุณเพิ่มไฟล์ใหม่ลงในรหัสของคุณและตอนนี้คุณพยายามส่งรหัสโดยไม่แสดง (เพิ่ม) ไฟล์

เพื่อเอาชนะสิ่งนี้คุณสามารถเพิ่มไฟล์ได้โดยใช้ git add ( git add your_file_name.py) จากนั้นคอมมิทการเปลี่ยนแปลง ( git commit -m "Rename Files" -m "Sample script to rename files as you like")


1

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

1) เพิ่มคอมไพล์ 2) คอมไพล์คอมมิท - m "ข้อความของคุณ" 3) คอมไพล์พุชมาสเตอร์

ฉันหวังว่านี่จะช่วยคุณได้



-7

ลบ dir/.../.git

ทำงานได้สำหรับฉัน


คำตอบของคุณต้องการข้อมูลพื้นฐานหรือข้อมูลเชิงลึกว่าทำไมหรือมีประโยชน์กับคุณ
Joshua K

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