Cách thêm nhiều tệp vào Git cùng một lúc


120

Đây sẽ là lần sử dụng git đầu tiên của tôi. Tôi đã thêm các tệp mới (rất nhiều) vào thư mục / dự án (kho lưu trữ cục bộ git).

Tôi đã xem qua các hướng dẫn và diễn đàn trực tuyến và thấy tôi có thể làm được

git commit -a

Vì vậy, tôi đi đến thư mục cơ sở của kho lưu trữ và làm một

sudo git commit -a

Nhưng sau đó, một số màn hình xuất hiện và yêu cầu tôi thêm một bình luận mà tôi làm. tôi không biết làm thế nào để tiến hành hoặc thoát. Tôi không muốn gây rối nên tôi đã làm ctrl + Z và không làm gì cả.

Các bạn có thể vui lòng phác thảo các lệnh tôi cần sử dụng?

git commit -a 

git push?

1
git commit -amở ra một trình soạn thảo để bạn gõ tin nhắn cam kết. Nhập một tin nhắn bạn muốn xem như đăng nhập và thoát khỏi trình chỉnh sửa. Điều này hoàn thành cam kết. Theo đó lên bằng cách đẩy những thay đổi của bạn để kho từ xa sử dụng git push <remote name> <branch name>nhưgit push remote master
Bhaskar

3
cũng lưu ý, bạn không cần (và không nên) sử dụngsudo
dax

Cảm ơn đã trả lời. Nếu tôi không sử dụng sudo, tôi nhận được quyền từ chối lỗi.
kishore.

2
Đã sử dụng sudo trước đây, bạn có thể có các tệp trong thư mục làm việc của bạn hiện bị sở hữu nhầm bởi root. Tại thời điểm này, thực hiện các hoạt động khác mà không có sudo sẽ gây ra lỗi từ chối cấp phép vì bạn không thể thay đổi các tệp do root sở hữu. Kho lưu trữ của bạn có thể là một mớ hỗn độn và tốt nhất là nên bắt đầu lại (và không sử dụng sudo).
Greg Hewgill

nếu bạn muốn thêm tất cả các tệp, bạn có thể sử dụng `git add -a`. Nhưng nếu bạn muốn thêm nhiều tệp đã chọn. bạn có thể sử dụng 'git add -i'. vui lòng tham khảo git-scm.com/book/en/v2/Git-Tools-Interactive-Staging này . Điều này sẽ giúp bạn .
Kapila Ranasinghe

Câu trả lời:


120

Để thêm tất cả các thay đổi bạn đã thực hiện:

git add .

Để cam kết với họ:

git commit -m "MY MESSAGE HERE" # -m là cờ tin nhắn

Bạn có thể đặt các bước đó lại với nhau như thế này:

git commit -a -m "MY MESSAGE HERE"

Để đẩy các thay đổi đã cam kết của bạn từ kho lưu trữ cục bộ sang kho lưu trữ từ xa:

git push origin master

Bạn có thể phải nhập tên người dùng / mật khẩu cho github sau này. Đây là một mồi tốt về việc sử dụng git. Một chút cũ, nhưng nó bao gồm những gì đang diễn ra thực sự tốt.


Sẽ -athêm các tệp mới (chưa được phân loại) trước khi xác nhận?
SabreWolfy

git commit -alà tốc ký cho git commit --all, vì vậy, nó sẽ.
dax

1
$ man git-commitbao gồm điều này cho -a: "Nói lệnh để tự động giai đoạn các tệp đã được sửa đổi và xóa, nhưng các tệp mới mà bạn chưa nói với Git về không bị ảnh hưởng.", đó là lý do tại sao tôi hỏi.
SabreWolfy

Để hoàn thiện, cách dễ nhất để thêm nhiều tệp thuộc một loại là sử dụng dấu hoa thị, ví dụ: sử dụng html "git add * .html"
Inyoka

381

Sử dụng git addlệnh, theo sau là danh sách các tên tệp được phân tách bằng dấu cách.

git add file-path-1 file-path-2 file-path-3

1
Chỉ cần chỉ định tên tệp sẽ gây ra lỗi này "fatal: pathspec 'filename.java' không khớp với bất kỳ tệp nào". Thay vào đó, chỉ định toàn bộ đường dẫn tệp và tên tệp như thế này 'git add long / path / {file1, file2, ..., filen}'
Shravan Ramamurthy

4
Điều này không hoạt động khi một trong các tên tệp bao gồm một khoảng trắng với git 1.9.5
Maxime Helen

Chúng ta cần xóa "<" và ">" khỏi điều này. Điều này sẽ gây nhầm lẫn cho một ai đó.
Saeed Entezari

30

Như một số đã đề cập một cách có thể là sử dụng dàn tương tác git . Điều này thật tuyệt khi bạn có các tệp có phần mở rộng khác nhau

$ 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>

Nếu bạn nhấn 2 thì enterbạn sẽ nhận được một danh sách các tập tin có sẵn sẽ được thêm vào:

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>>

Bây giờ bạn chỉ cần chèn số lượng tệp bạn muốn thêm, vì vậy nếu chúng tôi muốn thêm TODOindex.htmlchúng tôi sẽ nhập1,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>>

Bạn thấy số * trước? điều đó có nghĩa là tập tin đã được thêm vào

Bây giờ hãy tưởng tượng rằng bạn có 7 tệp và bạn muốn thêm tất cả chúng ngoại trừ thứ 7? Chắc chắn chúng ta có thể gõ 1,2,3,4,5,6nhưng hãy tưởng tượng thay vì 7 chúng ta có 16, điều đó sẽ khá cồng kềnh, điều tốt là chúng ta không cần phải nhập tất cả vì chúng ta có thể sử dụng phạm vi, bằng cách nhập1-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>>

Chúng tôi thậm chí có thể sử dụng nhiều phạm vi, vì vậy nếu chúng tôi muốn từ 1 đến 3 và từ 5 đến 7, chúng tôi gõ 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>>

Chúng tôi cũng có thể sử dụng điều này để bỏ tập tin, nếu chúng tôi gõ -number, vì vậy nếu chúng tôi muốn bỏ tập tin số 1, chúng tôi sẽ gõ -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>>

Và như bạn có thể tưởng tượng, chúng ta cũng có thể bỏ qua một loạt các tệp, vì vậy nếu chúng ta nhập -rangetất cả các tệp trong phạm vi đó sẽ không được xử lý. Nếu chúng tôi muốn hủy bỏ tất cả các tệp từ 5 đến 7, chúng tôi sẽ gõ -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
cá nhân tôi thích cách này nó rất dễ sử dụng khi bạn có nhiều tệp hơn để cam kết và các hoạt động khác.
Kapila Ranasinghe

Một khi bạn kết thúc, làm thế nào để bạn hoàn thành việc dàn dựng tương tác?
Crparedes

1
@Crparedes một khi bạn đã thêm các tệp, nếu bạn nhấn enter lần nữa, nó sẽ quay trở lại menu, sau đó bạn phải chọn tùy chọn 7để thoát khỏi phân đoạn tương tác.
Antio Fabio

28

Bạn cũng có thể chọn nhiều tệp như thế này

git add folder/subfolder/*

Điều này sẽ thêm tất cả các tệp trong thư mục con được chỉ định. Rất hữu ích khi bạn chỉnh sửa một loạt các tệp nhưng bạn chỉ muốn cam kết một số trong số chúng ...


14

Nếu bạn muốn thêm nhiều tệp trong một thư mục nhất định, bạn có thể chia chúng bằng cách sử dụng {,}. Điều này thật tuyệt vời khi không lặp lại những con đường dài, vd

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

Cẩn thận không đặt khoảng cách giữa ,.


dài / đường dẫn / ở đây là gì? @EliuX
lalithkumar

long / path có thể là một chuỗi đường dẫn có độ dài rất dài, vì vậy nó thoải mái hơn khi không lặp lại phần đó, mà không cần phải cdvào nó
EliuX

4

Khi bạn thay đổi tệp hoặc thêm tệp mới vào kho lưu trữ, trước tiên bạn phải tạo giai đoạn cho chúng.

git add <file>

hoặc nếu bạn muốn giai đoạn tất cả

git add .

Bằng cách này, bạn đang nói với git những tập tin bạn muốn trong lần xác nhận tiếp theo. Sau đó, bạn làm:

git commit -m 'your message here'

Bạn sử dụng

git push origin master

trong đó nguồn gốc là nhánh kho lưu trữ từ xa và chủ là nhánh kho lưu trữ cục bộ của bạn.


Cảm ơn bạn!. Trên lệnh cuối git đẩy gốc chủ. Tôi thực sự đang làm việc trên một tên nhánh khác (được tạo từ nhánh chính). Vì vậy, tôi cần phải ghi tên chi nhánh hoặc nguồn gốc của tôi. Cảm ơn một lần nữa
kishore.

Không có vấn đề gì. :) Vâng, bạn nên sử dụng tên chi nhánh của mình, chủ gốc chỉ là ví dụ.
somi

1

Có vẻ như git đang khởi chạy trình soạn thảo của bạn (có thể vi) để bạn có thể nhập tin nhắn cam kết. Nếu bạn không quen thuộc vi, thật dễ dàng để tìm hiểu những điều cơ bản . Các lựa chọn thay thế là:

  • Sử dụng git commit -a -m "my first commit message"để chỉ định thông báo cam kết trên dòng lệnh (sử dụng điều này sẽ không khởi chạy trình chỉnh sửa)

  • Đặt EDITORbiến môi trường thành trình chỉnh sửa mà bạn quen thuộc


Cảm ơn rất nhiều người đã trả lời. Tôi cam kết thành công và đẩy các tập tin của tôi.
kishore.

1

Nếu bạn muốn tạo giai đoạn và cam kết tất cả các tệp của mình trên Github, hãy làm như sau;

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

0

Bước1 .

git init

Bước2.

a) cho tất cả các tệp

git add -a

b) chỉ thư mục cụ thể

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

Bước 3.

git commit -m "Your message about the commit"

Bước4.

nhập mô tả hình ảnh ở đây

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

Bước5 .

git push -u origin master
git push origin master

nếu bạn phải đối mặt với lỗi này hơn

 ! [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.

Sử dụng lệnh này

git push --force origin master
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.