Git dodawanie istniejących plików do nowej gałęzi

0

Cześć,
mam gałąź branch z x plików które są już zakomitowane. Teraz tworzę branch1, przełączam się na nią i chcę dodać do niej kilka plików w których nie ma zmian. Jak to zrobić?

Z góry dzięki

2

Nie rozumiem. Jak tworzysz branch1 z branch to w momencie utworzenia wszystkie pliki powinny być takie same

0

I tak jest. Tylko na branch1 nie chcę wrzucać wszystkich plików z branch tylko kilka. Czyli powiedzmy że chcę zakomitować 10 plików i wypchnąć je na branch1

2

Ale one są już wrzucone, możesz co najwyżej usunąć tych których nie chcesz

8

Git to nie jest SVN czy inny serwer FTP, nie możesz wypchnąć plików na branch w ogóle. Branch to wskaźnik na stan repozytorium, nie katalog na pliki według własnego uznania.

0

@KamilAdam: a jak to zrobić? W sensie jak usunąć te pliki bo głównie o to chodzi. Mam branch gdzie jest masa plików w których nie ma zmian i chciałbym to ogarnąć

3

Z jakiego powodu chcesz usuwać niezmienione pliki? To normalne, że nie zmienia się wszystkich plików w gałęzi, tylko ich część.

Wygląda na problem X/Y albo niezrozumienie celu istnienia gałęzi.

2

Mam branch gdzie jest masa plików w których nie ma zmian i chciałbym to ogarnąć

Możesz usunąć pliki i zacommitować usunięcie, ale chyba nie o to ci chodzi. Przeczytaj jeszcze raz co napisał @somekind . Jeśli na gałęzi branch1 chcesz trzymać zmiany w stosunku do branch to po prostu nie ruszaj plików które cię nie interesują

0

znaczy ten branch1 to mój pomysł na rozwiązanie tego problemu. Po prostu na gałęzi branch chcę mieć tylko pliki w których nastąpiły jakieś zmiany a nie 70 plików a zmiany są w 5. Po prostu na gałęzi branch zrobiłem commit tylko zakomitowały się też pliki w których nie było zmian - teraz chciałbym to cofnąć i puścić commit z plikami które mają zmiany

6
michalos25 napisał(a):

Po prostu na gałęzi branch zrobiłem commit tylko zakomitowały się też pliki w których nie było zmian

Nie da się zacommitować plików w których nie było zmian. Commit jest zatwierdzeniem zmiany. Jeśli udało ci się zakomitować plik to musi być w nim jakaś zmiana. Czasem to jest np zmiana kodowania końca linii

4

@michalos25 o_O

  1. Na branchu są zawsze wszystkie pliki projektu. Branch to nie jest jakiś SVN patch z samymi zmianami
  2. Nie da się commitować plików bez zmian. Skoro się scommitowały to znaczy ze były w nich zmiany. Zrób reset mixed, zrewertuj zmiany w plikach w których twierdzisz ze nie ma zmian i commituj te "prawdziwe" zmiany
  3. Najlepiej jakbyś jednak pokazał jak wygląda to repo, bo teraz to jakieś wróżenie z fusów bo nie bardzo wiadomo co zrobiłes i co chcesz osiągnąć.
  4. Mam wrażenie ze zupełnie nie rozumiesz jak działa git
3

Nie rozumiesz jak działa git. W uproszczeniu:
Załóżmy że masz 100 plików z kodem.
Jak robisz brancha i zmieniasz np 1 linijkę, to widzisz na nim wszystkie 100, czyli 99 nie zmienionych i 1 z tą zmienioną linijką. ALE! on nie tworzy sobie kopii wszystkiego na dysku czy gdzieś. On sobie pod spodem tworzy tylko maciupki pliczek z informacją o tej 1 liniowej zmianie - nawet nie zmianie całego pliku, tylko konkretnej linii.
Dlatego nie przejmuj się tym że widzisz nie zmienione pliki. To tak ma działać. Całą magia jest pod spodem.

1

@michalos25: Wyobraź sobie, że rozwijasz jakiś projekt bez gita, i codziennie pakujesz ten projekt do archiwum zip i nazywasz go aktualną datą "2021-05-20 1900.zip" (dopisujesz też godzinę, na wypadek gdybyś chciał zrobił więcej niż jedną kopię dziennie). To jest pierwsza faza bardzo prymitywnej kontroli wersji. Dzięki temu, jak coś zepsujesz, to możesz sobie wypakować stan z zipa i masz projekt tak jak wtedy, kiedy stworzyłeś kopie.

Git, to jest dokładnie taka sama filozofia.

Zrobienie commita, to jest dokładnie to samo co stworzenie nowego zipa z całym Twoim projektem w środku. Komenda checkout to jest wypakowanie jakiegoś zipa do Twojego katalogu z projektem.

Teraz co by było, gdybyś stwierdził że to co robisz od 5ciu dni nie ma sensu, i chcesz zacząć od nowa? To proste, robisz checkout zipa sprzed pięciu dni (czyli 5 zipów temu) i wypakowujesz go w swój projekt. Pracujesz nad nim, i robiąc commit tworzysz nowy zip, na podstawie zipa sprzed 5ciu dni. Żeby nie pomylić dzisiejszego zipa z nowym rozwiązaniem od dzisiejszego zipa ciągle ze starym rozwiązaniem, nazywasz go "2021-05-20 1900 v2.zip". Gratulacje, wlasnie stworzyłeś nową gałąź o nazwie "v2".

Teraz robiąc checkout na dzisiejszy zip v2, albo na dzisiejszy commit z poprzedniego zipa (czyli wypakowujac odpowiedni zip w swój projekt), możesz się przełączać pomiędzy rozwiązaniami.

Odpowiadając na Twoje pytanie (które mam wrażenie że @Shalom, @somekind i inni źle zinterpretowali):

Dwie sytuacje:

  • Czy branch1 istniał wcześniej? Jeśli tak, to mogą być na nim różnice w plikach, i tutaj musisz wiedzieć co chcesz zrobić. Jeśli chcesz je połączyć to spróbuj "merge" lub "rebase".
  • Czy właśnie stworzyłeś nowy branch branch1, będąc na głównym branch? Jeśli tak, to nie musisz nic robić. Wszystkie zmiany (tzn commity) z brancha na którym byłeś są już na nowym branchu. Innymi słowy, tworząc nowy branch, będąc na innym, te dwa branche są identyczne i mają w sobie dokładnie te same zmiany, commity i pliki. Tworzenie nowego brancha to nie jest stworzenie nowego, pustego repozytorium. Możesz to sobie zobrazować przełączając się na nowy branch i odpalając "git log".

Jeszcze jest trzeci przypadek, branch istniał wcześniej, ale o tym nie wiedziałeś. Upewnij się że branch nie istnieje, zanim chcesz go stworzyć.

chcę dodać do niej kilka plików w których nie ma zmian

Pytanie jest takie: czemu chcesz dodać te pliki?

Uważasz że powinieneś? Jeśli tak, to czytaj odpowiedź wyżej.

Widzisz że nie ma plików, a sądzisz że powinny być? To prawdopodobnie branch istniał wcześniej, i miał inne zmiany. Stwórz inny, nowych branch, albo usuń stary przed stworzeniem go ponownie. Wpisz komendę "git branch".

Co masz na myśli mówiąc "kilka plików w których nie ma zmian"? Masz na myśli że to puste pliki? Np puste pliki tekstowe? Jeśli tak, to po prostu zrób add a potem commit, uprzednio przełączając się na nowy branch.

Masz na myśli, że chcesz zrobić commit nie wprowadzając żadnych zmian w istniejących plikach? Czytaj odpowiedź wyżej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1