ทำไม 'คอมมิท' ไม่บันทึกการเปลี่ยนแปลงของฉัน?


251

ฉันทำสิ่งgit commit -m "message"นี้:

> git commit -m "save arezzo files"
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

แต่หลังจากนั้นเมื่อฉันgit statusแสดงไฟล์ที่แก้ไขเดียวกัน:

> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

ผมทำอะไรผิดหรือเปล่า?


16
ใช้git commit -am "save arezzo files"เพื่อเพิ่มการเปลี่ยนแปลงทั้งหมดโดยอัตโนมัติ (wrt .gitignore) คุณอาจต้องการเพิ่มเฉพาะไฟล์ / dirs เฉพาะ:git add file.src
mbx

คำตอบ:


400

ตามที่ข้อความแจ้งว่า:

ไม่มีการเพิ่มการเปลี่ยนแปลงที่จะกระทำ (ใช้ "git เพิ่ม" และ / หรือ "git กระทำ -a")

Git มี "พื้นที่การแสดงละคร" ที่ไฟล์ต้องมีการเพิ่มก่อนที่จะถูกมุ่งมั่นที่คุณสามารถอ่านคำอธิบายของมันนี่


สำหรับตัวอย่างเฉพาะของคุณคุณสามารถใช้:

git commit -am "save arezzo files"

(โปรดสังเกตว่าการเสริมaในธงสามารถเขียนเป็นgit commit -a -m "message"- ทั้งสองทำสิ่งเดียวกัน)

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

คุณยังสามารถค้นหาเอกสารทั่วไปและแบบฝึกหัดสำหรับวิธีการใช้ git ในหน้าเอกสารของ gitซึ่งจะให้รายละเอียดเพิ่มเติมเกี่ยวกับแนวคิดของการจัดเตรียม / เพิ่มไฟล์


อีกสิ่งหนึ่งที่ควรค่าแก่การรู้คือstaging แบบอินเทอร์แอคทีฟ - อนุญาตให้คุณเพิ่มบางส่วนของไฟล์ลงใน staging area ดังนั้นหากคุณทำการเปลี่ยนแปลงรหัสที่แตกต่างกันสามแบบ (สำหรับการทำงานที่เกี่ยวข้อง เปลี่ยนแปลงและเพิ่ม / กระทำแต่ละส่วนตามลำดับ การมีข้อผูกพันที่เฉพาะเจาะจงน้อยลงเช่นนี้จะเป็นประโยชน์


@PeterBoughton คุณหมายถึง "การเพิ่มเชิงโต้ตอบ" แทน "การเพิ่มการโต้ตอบ" หรือไม่
djb

3
ไม่ฉันหมายถึงการเพิ่มการโต้ตอบ
Peter Boughton

2
ที่เก็บโลคัลเป็นพื้นที่จัดเตรียมชนิดหนึ่งก่อนที่จะส่งรหัสไปยังที่เก็บรีโมต ทำไมเพิ่ม "เลเยอร์" อีกอันก่อนที่จะยอมรับการเปลี่ยนแปลงมันไม่ซับซ้อนเกินไปใช่ไหม ฉันใหม่กับคอมไพล์ แต่ฉันคิดว่านักพัฒนา 99,99% มักใช้คอมมิท --am เพราะการเปลี่ยนแปลงไม่ได้อยู่นอกสภาพแวดล้อมท้องถิ่น
PawelRoman

2
ฉันคิดว่าฉันเพิ่งพบเจอเพราะฉันคุ้นเคยกับ IDE ที่ดูแลเรื่องนี้ให้ฉัน ไม่แน่ใจว่าทำไมจึงเป็นขั้นตอนที่จำเป็นเช่นกัน แต่อีกครั้งมีเรื่อง git มากมายที่ฉันไม่เข้าใจ ... ฉันหมายถึง git ...
trpt4him

49

คุณไม่ได้เพิ่มการเปลี่ยนแปลง อาจเพิ่มเฉพาะพวกเขาผ่านทาง

git add filename1 filename2

หรือเพิ่มการเปลี่ยนแปลงทั้งหมด (จากเส้นทางรากของโครงการ)

git add .

หรือใช้ชวเลข-aในขณะที่รับ:

git commit -a -m "message".

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

40

คุณควรทำ:

git commit . -m "save arezzo files"

4
นี่น่าจะเป็นคำตอบที่ถูกต้องสำหรับคำถามของ OP เขาไม่ต้องการที่จะ "เพิ่ม" เขาต้องการที่จะกระทำสิ่งที่ถูกดัดแปลง
VectorVortec

8

ฉันคัดลอกโครงการย่อยขนาดเล็กที่ฉันมีซึ่งอยู่ภายใต้การควบคุมแหล่ง Git ไปยังโครงการอื่นและลืมลบโฟลเดอร์. git เมื่อฉันไปคอมมิชชันฉันได้รับข้อความเดียวกับด้านบนและไม่สามารถล้างจนกว่าฉันจะลบ.gitโฟลเดอร์

มันค่อนข้างโง่ แต่ก็คุ้มค่าที่จะตรวจสอบว่าคุณไม่มีโฟลเดอร์. git ภายใต้โฟลเดอร์ที่ไม่ยอมรับ


7

คุณสามารถทำสิ่งต่อไปนี้

git add -u -n

ในการตรวจสอบไฟล์ที่คุณแก้ไขและกำลังจะถูกเพิ่ม (ตัวเลือก dry run: -n) แล้ว

git add -u

ในการเพิ่มไฟล์ที่แก้ไขแล้ว


4

ฉันพบว่าปัญหานี้ปรากฏขึ้นเมื่อฉันทำgit add .ไดเรกทอรีย่อยด้านล่างที่.gitignoreไฟล์ของฉันมีชีวิตอยู่ (ไดเรกทอรีบ้านของพื้นที่เก็บข้อมูลของฉันเพื่อที่จะพูด) ลองเปลี่ยนไดเรกทอรีที่คุณสุดยอดไดเรกทอรีและทำงานตามgit add .git commit -m "my commit message"


4

อาจเป็นสิ่งที่ชัดเจน แต่ ...

ถ้าคุณมีปัญหาที่มีค่าดัชนีการใช้Git-GUI คุณจะได้รับมุมมองที่ดีมากว่าดัชนี (พื้นที่การจัดเตรียม) ทำงานอย่างไร

แหล่งข้อมูลอื่นที่ช่วยให้ฉันเข้าใจดัชนีคือ Scott Chacons "Getting Git" หน้า 259 และไปข้างหน้า

ฉันเริ่มใช้บรรทัดคำสั่งเนื่องจากเอกสารส่วนใหญ่แสดงให้เห็นว่า ...

ฉันคิดว่า git-gui และ gitk ทำให้ฉันทำงานได้เร็วขึ้นและฉันก็กำจัดนิสัยที่ไม่ดีเช่น "git pull" เช่น ... ตอนนี้ฉันจะดึงข้อมูลก่อนเสมอ ... ดูว่าการเปลี่ยนแปลงใหม่จะเกิดขึ้นก่อนที่ฉันจะรวมเข้าด้วยกัน


3

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

rm -rf .git

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


1

หากคุณมีไฟล์เพิ่มเติมในกรณีของฉันฉันมีไฟล์รูปภาพ 7000 ไฟล์เมื่อฉันพยายามเพิ่มไฟล์เหล่านั้นจากโฟลเดอร์เส้นทางของโปรเจ็กต์มันไม่ได้เพิ่มแต่เมื่อฉันไปที่โฟลเดอร์รูปภาพทุกอย่างก็โอเค ผ่านโฟลเดอร์เป้าหมายและคำสั่งเช่น abows

git add .
git commit -am "image uploading"
git push origin master

git push master origin การแจกแจงวัตถุ: 6574, เสร็จแล้ว เสร็จสิ้นการนับวัตถุ: 100% (6574/6574) เสร็จแล้ว การบีบอัดเดลต้าใช้มากถึง 4 เธรดการบีบอัดวัตถุ: 100% (6347/6347) เสร็จแล้ว วัตถุการเขียน: 28% (1850/6569), 142.17 MiB | 414.00 KiB / s


0

ฉันมีปัญหาที่ฉันกำลังทำอยู่commit --amendแม้จะออก a git add .และมันก็ยังไม่ทำงาน ปรากฎว่าฉันทำการ.vimrcปรับแต่งบางอย่างและตัวแก้ไขของฉันทำงานไม่ถูกต้อง แก้ไขข้อผิดพลาดเหล่านี้เพื่อให้vimส่งคืนรหัสที่ถูกต้องแก้ไขปัญหา


0

ฉันมีปัญหาคล้ายกันมากกับข้อความแสดงข้อผิดพลาดเดียวกัน "การเปลี่ยนแปลงที่ไม่ได้มีการจัดฉากไว้สำหรับการส่งมอบ" แต่เมื่อฉันทำสิ่งต่าง ในที่สุดฉันก็พบว่าในขณะที่ฉันกลับมีการเปลี่ยนแปลงกรณีไดเรกทอรี อดีต "PostgeSQL" ถึง "postgresql" อย่างที่ฉันจำได้ตอนนี้บางครั้งคอมไพล์จะทิ้งไฟล์ไว้สองไฟล์ในไดเร็กทอรี่ case เก่า จากนั้นคุณจะส่งมอบเวอร์ชั่นใหม่ให้กับเคสใหม่

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

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

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


0

หากคุณมีโฟลเดอร์ย่อยซึ่งถูกโคลนจาก git-Repository อื่นก่อนอื่นคุณต้องลบไฟล์ $ .git $ ออกจาก child-Repository: rm -rf .git หลังจากนั้นคุณสามารถเปลี่ยนเป็นโฟลเดอร์หลักและใช้งานgit add -Aได้

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