วิธีเพิ่มไฟล์หลายไฟล์ใน Git ในเวลาเดียวกัน


120

นี่จะเป็นการใช้คอมไพล์ครั้งแรกของฉัน ฉันได้เพิ่มไฟล์ใหม่ (มาก) ไปยังโฟลเดอร์ / โครงการ (git local repository)

ฉันอ่านบทแนะนำและฟอรัมออนไลน์และเห็นว่าฉันทำได้

git commit -a

ดังนั้นฉันจึงไปที่โฟลเดอร์ฐานของที่เก็บและทำไฟล์

sudo git commit -a

แต่แล้วหน้าจอบางหน้าก็ปรากฏขึ้นและขอให้ฉันเพิ่มความคิดเห็นที่ฉันทำ ฉันไม่รู้ว่าจะดำเนินการต่อหรือออกอย่างไร ฉันไม่ต้องการที่จะสับสนดังนั้นฉันจึงใช้ ctrl + Z และไม่ได้ทำอะไรเลย

พวกคุณช่วยสรุปคำสั่งที่ฉันต้องใช้ได้ไหม

git commit -a 

และ

git push?

1
git commit -aเปิดตัวแก้ไขเพื่อให้คุณพิมพ์ข้อความคอมมิต ป้อนข้อความที่คุณต้องการให้เห็นเป็นบันทึกและออกจากโปรแกรมแก้ไข การดำเนินการนี้เสร็จสมบูรณ์ ทำตามนั้นโดยการพุชการเปลี่ยนแปลงของคุณไปยังที่เก็บระยะไกลโดยใช้git push <remote name> <branch name>เช่นgit push remote master
Bhaskar

3
โปรดทราบว่าคุณไม่จำเป็นต้อง (และไม่ควร) ใช้sudo
dax

ขอบคุณสำหรับการตอบกลับหากฉันไม่ใช้ sudo ฉันได้รับข้อผิดพลาดถูกปฏิเสธการอนุญาต
คีชอร์

2
เมื่อใช้ sudo ก่อนหน้านี้คุณอาจมีไฟล์ในไดเร็กทอรีการทำงานของคุณซึ่งตอนนี้รูทเป็นเจ้าของโดยไม่ได้ตั้งใจ ณ จุดนี้การดำเนินการอื่น ๆโดยไม่ใช้ sudo จะทำให้เกิดข้อผิดพลาดที่ปฏิเสธการอนุญาตเนื่องจากคุณไม่สามารถเปลี่ยนไฟล์เหล่านั้นที่เป็นของรูทได้ ที่เก็บของคุณอาจจะดูวุ่นวายและควรเริ่มต้นใหม่ (และอย่าใช้ sudo)
Greg Hewgill

หากคุณต้องการเพิ่มไฟล์ทั้งหมดคุณสามารถใช้ `` git add -a '' ได้ แต่ถ้าคุณต้องการเพิ่มไฟล์ที่เลือกหลายไฟล์ คุณสามารถใช้ `` git add -i '' โปรดดูนี้git-scm.com/book/en/v2/Git-Tools-Interactive-Staging สิ่งนี้จะช่วยคุณได้
Kapila Ranasinghe

คำตอบ:


120

ในการเพิ่มการเปลี่ยนแปลงทั้งหมดที่คุณทำ:

git add .

เพื่อยืนยัน:

git commit -m "MY MESSAGE HERE" # -m คือธงข้อความ

คุณสามารถรวบรวมขั้นตอนเหล่านี้เข้าด้วยกันดังนี้:

git commit -a -m "MY MESSAGE HERE"

ในการพุชการเปลี่ยนแปลงที่มุ่งมั่นของคุณจากที่เก็บในเครื่องของคุณไปยังที่เก็บระยะไกลของคุณ:

git push origin master

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


จะ-aเพิ่มไฟล์ใหม่ (ที่ไม่ได้จัดเตรียม) ก่อนที่จะกระทำหรือไม่
SabreWolfy

git commit -aเป็นชวเลขgit commit --allดังนั้นใช่มันจะ
dax

1
$ man git-commitรวมถึงสิ่งนี้สำหรับ-a: "บอกคำสั่งให้จัดทำไฟล์ที่ถูกแก้ไขและลบโดยอัตโนมัติ แต่ไฟล์ใหม่ที่คุณไม่ได้แจ้ง Git จะไม่ได้รับผลกระทบ" ซึ่งเป็นสาเหตุที่ฉันถาม
SabreWolfy

เพื่อความสมบูรณ์วิธีที่ง่ายที่สุดในการเพิ่มไฟล์ประเภทหนึ่งคือการใช้เครื่องหมายดอกจันตัวอย่างเช่นสำหรับ html ให้ใช้ "git add * .html"
Inyoka

385

ใช้git addคำสั่งตามด้วยรายการชื่อไฟล์ที่คั่นด้วยช่องว่าง รวมถึงเส้นทางถ้าในไดเรกทอรีอื่น ๆ directory-name/file-nameเช่น

git add file-1 file-2 file-3

1
การระบุชื่อไฟล์ก็ทำให้เกิดข้อผิดพลาด "fatal: pathspec 'filename.java' ไม่ตรงกับไฟล์ใด ๆ " ให้ระบุเส้นทางไฟล์ทั้งหมดและชื่อไฟล์แทนเช่นนี้ "git add long / path / {file1, file2, ... , filen}"
Shravan Ramamurthy

4
สิ่งนี้ใช้ไม่ได้เมื่อหนึ่งในชื่อไฟล์มีช่องว่างที่มี git 1.9.5
Maxime Helen

เราจำเป็นต้องลบ "<" and ">" ออกจากสิ่งนี้ สิ่งนี้จะทำให้ใครบางคนสับสน
Saeed Entezari

มีประโยชน์มากสำหรับฉัน
JesúsSánchez

30

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

$ git add -i
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb

*** Commands ***
  1: status     2: update      3: revert     4: add untracked
  5: patch      6: diff        7: quit       8: help
What now>

หากคุณกด2 แล้วenterคุณจะได้รับรายชื่อของไฟล์ที่มีอยู่เพื่อที่จะเพิ่ม:

What now> 2
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
  2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

ตอนนี้คุณต้องแทรกจำนวนไฟล์ที่คุณต้องการเพิ่มดังนั้นหากเราต้องการเพิ่มTODOและindex.htmlเราจะพิมพ์1,2

Update>> 1,2
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
  3:    unchanged        +5/-1 lib/simplegit.rb
Update>>

คุณจะเห็นไฟล์ * ก่อนหมายเลข? นั่นหมายความว่ามีการเพิ่มไฟล์

ตอนนี้ลองนึกดูว่าคุณมี 7 ไฟล์และคุณต้องการเพิ่มทั้งหมดยกเว้นไฟล์ที่ 7? แน่นอนว่าเราสามารถพิมพ์ได้1,2,3,4,5,6แต่ลองนึกภาพแทนที่จะเป็น 7 เรามี 16 ซึ่งจะค่อนข้างยุ่งยากสิ่งที่ดีที่เราไม่จำเป็นต้องพิมพ์ทั้งหมดเพราะเราสามารถใช้ช่วงโดยพิมพ์1-6

Update>> 1-6
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
* 4:    unchanged        +5/-1 file4.html
* 5:    unchanged        +5/-1 file5.html
* 6:    unchanged        +5/-1 file6.html
  7:    unchanged        +5/-1 file7.html
Update>>

เราสามารถใช้หลายช่วงได้ดังนั้นหากเราต้องการตั้งแต่ 1 ถึง 3 และจาก 5 ถึง 7 เราพิมพ์1-3, 5-7:

Update>> 1-3, 5-7
           staged     unstaged path
* 1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
  4:    unchanged        +5/-1 file4.html
* 5:    unchanged        +5/-1 file5.html
* 6:    unchanged        +5/-1 file6.html
* 7:    unchanged        +5/-1 file7.html
Update>>

นอกจากนี้เรายังสามารถใช้สิ่งนี้เพื่อคลายสเตจไฟล์ได้หากเราพิมพ์-numberดังนั้นหากเราต้องการยกเลิกสเตจไฟล์หมายเลข 1 เราจะพิมพ์-1:

Update>> -1
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
  4:    unchanged        +5/-1 file4.html
* 5:    unchanged        +5/-1 file5.html
* 6:    unchanged        +5/-1 file6.html
* 7:    unchanged        +5/-1 file7.html
Update>>

และอย่างที่คุณสามารถจินตนาการได้ว่าเราสามารถยกเลิกการจัดเตรียมไฟล์ต่างๆได้เช่นกันดังนั้นหากเราพิมพ์-rangeไฟล์ทั้งหมดในช่วงนั้นจะไม่มีการจัดเตรียม หากเราต้องการคลายสเตจไฟล์ทั้งหมดจาก 5 ถึง 7 เราจะพิมพ์-5-7:

Update>> -5-7
           staged     unstaged path
  1:    unchanged        +0/-1 TODO
* 2:    unchanged        +1/-1 index.html
* 3:    unchanged        +5/-1 lib/simplegit.rb
  4:    unchanged        +5/-1 file4.html
  5:    unchanged        +5/-1 file5.html
  6:    unchanged        +5/-1 file6.html
  7:    unchanged        +5/-1 file7.html
Update>>

2
โดยส่วนตัวแล้วฉันชอบวิธีนี้ ใช้งานง่ายเมื่อคุณมีไฟล์ที่ต้องคอมมิตและการดำเนินการอื่น ๆ มากขึ้น
Kapila Ranasinghe

เมื่อสิ้นสุดแล้วคุณจะจบการแสดงละครเชิงโต้ตอบได้อย่างไร?
Crparedes

1
@Crparedes เมื่อคุณเพิ่มไฟล์แล้วหากคุณกด Enter อีกครั้งมันจะกลับไปที่เมนูคุณต้องเลือกตัวเลือก7เพื่อออกจากการแสดงละครแบบโต้ตอบ
Fabio Antunes

28

คุณยังสามารถเลือกหลายไฟล์เช่นนี้

git add folder/subfolder/*

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


14

{,}หากคุณต้องการที่จะเพิ่มหลายไฟล์ในโฟลเดอร์ที่กำหนดคุณสามารถแยกพวกเขาโดยใช้ สิ่งนี้ยอดเยี่ยมสำหรับการไม่ใช้เส้นทางยาว ๆ ซ้ำ ๆ เช่น

git add long/path/{file1,file2,...,filen}

ระวังอย่าเว้นช่องว่างระหว่างไฟล์,.


long / path / here คืออะไร @EliuX
lalithkumar

long / path อาจเป็นสตริงพา ธ ที่มีความยาวมากดังนั้นมันจึงสะดวกสบายมากขึ้นไม่ต้องทำซ้ำส่วนนั้นโดยไม่ต้องcdเข้าไป
EliuX

4

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

git add <file>

หรือหากคุณต้องการแสดงทั้งหมด

git add .

การทำเช่นนี้หมายความว่าคุณกำลังบอกให้คอมไพล์ไฟล์ที่คุณต้องการในการคอมมิตครั้งต่อไป จากนั้นคุณจะทำ:

git commit -m 'your message here'

คุณใช้

git push origin master

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


ขอบคุณ!. บนคำสั่งสุดท้าย git push origin master ฉันกำลังทำงานกับชื่อสาขาอื่น (ซึ่งสร้างจากสาขาหลัก) ดังนั้นฉันจำเป็นต้องระบุชื่อสาขาหรือต้นกำเนิดของฉัน ขอบคุณอีกครั้ง
kishore

ไม่มีปัญหา :) ใช่คุณควรใช้ชื่อสาขาของคุณต้นแบบต้นทางเป็นเพียงตัวอย่างเท่านั้น
somi

1

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

  • ใช้git commit -a -m "my first commit message"เพื่อระบุข้อความคอมมิตบนบรรทัดคำสั่ง (การใช้สิ่งนี้จะไม่เปิดตัวแก้ไข)

  • ตั้งค่าEDITORตัวแปรสภาพแวดล้อมเป็นตัวแก้ไขที่คุณคุ้นเคย


ขอบคุณทุกคนที่ตอบกลับ ฉันมุ่งมั่นและผลักดันไฟล์ของฉันได้สำเร็จ
คีชอร์

1

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

git add -A                                                                                
git commit -m "commit message"
git push origin master

0

👉ขั้นตอนที่ 1.

git init

👉ขั้นตอนที่ 2.

ก) สำหรับไฟล์ทั้งหมด

git add -a

b) เฉพาะโฟลเดอร์เฉพาะ

git add <folder1> <folder2> <etc.>

👉ขั้นตอนที่ 3.

git commit -m "Your message about the commit"

👉ขั้นตอนที่ 4.

ใส่คำอธิบายภาพที่นี่

git remote add origin https://github.com/yourUsername/yourRepository.git

👉ขั้นตอนที่ 5

git push -u origin master
git push origin master

หากคุณพบข้อผิดพลาดนี้มากกว่า

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/harishkumawat2610/Qt5-with-C-plus-plus.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

👉ใช้คำสั่งนี้

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