Jak jednocześnie dodać wiele plików do Git

120

To będzie moje pierwsze użycie gita. Dodałem nowe pliki (dużo) do folderu / projektu (repozytorium lokalne git).

Przeszedłem przez samouczki i fora online i widzę, że potrafię

git commit -a

Więc idę do folderu podstawowego repozytorium i robię plik

sudo git commit -a

Ale potem pojawia się kilka ekranów i prosi mnie o komentarz, który robię. nie wiem, jak kontynuować lub wyjść. Nie chcę zepsuć, więc zrobiłem ctrl + Z i nic nie zrobiłem.

Czy możecie nakreślić polecenia, których potrzebuję?

git commit -a 

i

git push?
kishore.
źródło
1
git commit -aotwiera edytor, w którym możesz wpisać treść wiadomości. Wpisz wiadomość, którą chcesz zobaczyć jako dziennik i wyjdź z edytora. To kończy zatwierdzenie. Kontynuuj, wysyłając zmiany do zdalnego repozytorium, używając na git push <remote name> <branch name>przykładgit push remote master
Bhaskar,
3
Pamiętaj również, że nie musisz (i nie powinieneś) używaćsudo
dax
Dziękuję za odpowiedź Jeśli nie używam sudo otrzymuję błąd odmowy pozwolenia.
kishore.
2
Używając wcześniej sudo, prawdopodobnie masz w katalogu roboczym pliki, które są teraz omyłkowo własnością roota. W tym momencie wykonywanie innych operacji bez sudo spowoduje błąd odmowy uprawnień, ponieważ nie możesz zmienić tych plików, których właścicielem jest root. W Twoim repozytorium może być trochę bałaganu i najlepiej będzie zacząć od nowa (i nie używaj sudo).
Greg Hewgill,
jeśli chcesz dodać wszystkie pliki, możesz użyć `git add -a` .Ale jeśli chcesz dodać wiele wybranych plików. możesz użyć `git add -i '. zapoznaj się z tym git-scm.com/book/en/v2/Git-Tools-Interactive-Staging . to ci pomoże.
Kapila Ranasinghe

Odpowiedzi:

120

Aby dodać wszystkie wprowadzone zmiany:

git add .

Aby je popełnić:

git commit -m "MY MESSAGE HERE" # -m to flaga wiadomości

Możesz połączyć te kroki w następujący sposób:

git commit -a -m "MY MESSAGE HERE"

Aby przesłać zatwierdzone zmiany z lokalnego repozytorium do zdalnego repozytorium:

git push origin master

Być może po tym będziesz musiał wpisać swoją nazwę użytkownika / hasło do github. Oto dobre wprowadzenie do korzystania z git. Trochę stary, ale bardzo dobrze obejmuje to, co się dzieje.

dax
źródło
Czy -adoda nowe (niestarzone) pliki przed zatwierdzeniem?
SabreWolfy
git commit -ajest skrótem git commit --all, więc tak, będzie.
dax
1
$ man git-commitobejmuje to dla -a: „Powiedz komendzie, aby automatycznie przygotowywała pliki, które zostały zmodyfikowane i usunięte, ale nie ma to wpływu na nowe pliki, o których nie poinformowałeś Git”.
SabreWolfy
Dla kompletności najłatwiejszym sposobem dodania wielu plików jednego typu jest użycie gwiazdki, na przykład dla html użyj "git add * .html"
Inyoka
383

Użyj git addpolecenia, po którym następuje lista nazw plików oddzielonych spacjami. Uwzględnij ścieżki, jeśli są w innych katalogach, np directory-name/file-name.

git add file-1 file-2 file-3
Reggie Pinkham
źródło
1
Samo podanie nazwy pliku daje ten błąd: „fatal: pathspec 'filename.java' nie pasuje do żadnego pliku”. Zamiast tego określ całą ścieżkę do pliku i nazwę pliku w ten sposób „git add long / path / {plik1, plik2, ..., filen}”
Shravan Ramamurthy
4
To nie działa, gdy jedna z nazw plików zawiera spacje z git 1.9.5
Maxime Helen
Musimy usunąć z tego „<” i „>”. To kogoś zmyli.
Saeed Entezari
bardzo pomocny dla mnie
Jesús Sánchez
30

Jak niektórzy wspominali, możliwym sposobem jest użycie interaktywnej inscenizacji git . Jest to świetne, gdy masz pliki z różnymi rozszerzeniami

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

Jeśli naciśniesz 2 wtedy enterotrzymasz listę dostępnych plików do dodania:

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

Teraz wystarczy wpisać liczbę plików, które chcesz dodać, więc gdybyśmy chcieli dodać TODOi index.htmlwpisalibyśmy1,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>>

Widzisz * przed numerem? to znaczy, że plik został dodany.

Teraz wyobraź sobie, że masz 7 plików i chcesz dodać je wszystkie oprócz siódmego? Jasne, moglibyśmy pisać, 1,2,3,4,5,6ale wyobraź sobie, że zamiast 7 mamy 16, co byłoby dość kłopotliwe, dobrze, że nie musimy wpisywać ich wszystkich, ponieważ możemy używać zakresów, wpisując1-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>>

Możemy nawet użyć wielu zakresów, więc jeśli chcemy od 1 do 3 i od 5 do 7 wpisujemy 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>>

Możemy również użyć tego do zdestestowania plików, jeśli piszemy -number, więc jeśli chcielibyśmy zdestestować plik numer 1, wpisalibyśmy -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>>

Jak możesz sobie wyobrazić, możemy również zdestagować szereg plików, więc jeśli wpiszemy -rangewszystkie pliki z tego zakresu, zostaną one wycofane. Gdybyśmy chcieli zdestagować wszystkie pliki od 5 do 7, wpisalibyśmy -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>>
Fabio Antunes
źródło
2
osobiście lubię ten sposób. jest łatwy w użyciu, gdy masz więcej plików do zatwierdzenia i innych operacji.
Kapila Ranasinghe
Kiedy skończysz, jak zakończysz interaktywną inscenizację?
Crparedes
1
@Crparedes po dodaniu plików, ponowne naciśnięcie klawisza Enter powoduje powrót do menu, a następnie wybranie opcji 7wyjścia z interaktywnej inscenizacji.
Fabio Antunes
28

Możesz także wybrać wiele takich plików

git add folder/subfolder/*

Spowoduje to dodanie wszystkich plików w określonym podfolderze. Bardzo przydatne, gdy edytujesz kilka plików, ale chcesz po prostu zatwierdzić niektóre z nich ...

nadalsol
źródło
14

Jeśli chcesz dodać wiele plików w danym folderze, możesz je podzielić za pomocą {,}. Jest to świetne, jeśli nie powtarzasz długich ścieżek, np

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

Uważaj, aby nie wstawiać spacji między ,.

EliuX
źródło
co to jest długa / ścieżka / tutaj? @EliuX
lalithkumar
long / path mógłby być ciągiem ścieżki o bardzo długiej długości, więc wygodniej jest nie powtarzać takiej części, bez konieczności cdw nią
wbijania
4

Kiedy zmieniasz pliki lub dodajesz nowe w repozytorium, musisz je najpierw przygotować.

git add <file>

lub jeśli chcesz wszystko zaaranżować

git add .

Robiąc to, mówisz, że masz git, jakie pliki chcesz w następnym zatwierdzeniu. Następnie robisz:

git commit -m 'your message here'

Używasz

git push origin master

gdzie źródło to zdalna gałąź repozytorium, a master to lokalna gałąź repozytorium.

somi
źródło
Dziękuję Ci!. Przy ostatnim poleceniu git push origin master. W rzeczywistości pracuję nad inną nazwą gałęzi (która została utworzona z gałęzi głównej). Więc czy muszę wprowadzić nazwę mojej gałęzi lub mistrza pochodzenia. Jeszcze raz dziękuję
kishore.
Nie ma problemu. :) Tak, powinieneś używać nazw gałęzi, wzorzec pochodzenia to tylko przykłady.
somi
1

Wygląda na to, że git uruchamia Twój edytor (prawdopodobnie vi), abyś mógł wpisać wiadomość o zatwierdzeniu. Jeśli nie jesteś zaznajomiony z tym vi, możesz łatwo nauczyć się podstaw . Alternatywy to:

  • Służy git commit -a -m "my first commit message"do określania komunikatu o zatwierdzeniu w wierszu poleceń (użycie tego nie spowoduje uruchomienia edytora)

  • Ustaw EDITORzmienną środowiskową na edytor, który znasz

Greg Hewgill
źródło
Wielkie dzięki wszystkim, którzy odpowiedzieli. Z powodzeniem zatwierdziłem i przekazałem moje pliki.
kishore.
1

Jeśli chcesz przygotować i zatwierdzić wszystkie swoje pliki na Github, wykonaj następujące czynności;

git add -A                                                                                
git commit -m "commit message"
git push origin master
Johnson Ogwuru
źródło
0

👉 krok 1 .

git init

👉 krok 2.

a) dla wszystkich plików

git add -a

b) tylko określony folder

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

👉 krok 3.

git commit -m "Your message about the commit"

👉 krok 4.

wprowadź opis obrazu tutaj

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

👉 krok 5 .

git push -u origin master
git push origin master

jeśli napotkasz ten błąd, niż

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

👉 Użyj tego polecenia

git push --force origin master
Harish Kumawat
źródło