Git #12: Commit wybranych zmian w pliku
Git commit wybranej części pliku. Już teraz nie musisz się martwić jeśli potrzebujesz wysłać do repozytorium tylko wybrane fragmenty pliku!

Git 12 Commit wybranych zmian z pliku
Wprowadzanie zmian do repozytorium najczęściej nam się kojarzy z wykonywaniem operacji git commit, a wcześniej add na całych plikach. Co, jednak jeśli wykonaliśmy szereg zmian, ale po dłuższym namyśle postanowiliśmy dodać do repozytorium tylko część z nich? Oczywiście zawsze można wycofać cześć zmian lub je gdzieś przekopiować, dodać plik do repozytorium, a potem przywracać usunięte zmiany… Jednak skoro to czytacie, to oznacza, że poszukujecie bardziej profesjonalnych rozwiązań.
Przygotowanie repozytorium
Na początek stwórzmy folder z dowolną nazwą, np. commit_part, a następnie dodajmy tam pusty plik sample.py:
qabrio@shserver:~$ mkdir commit_part
qabrio@shserver:~$ cd commit_part
qabrio@shserver:~/commit_part$ touch sample.py
Zapiszmy teraz do tego pliku skrypt obliczający elementy ciągu Fibbonacciego:
n_fib = int(input("Provide number: "))
n1, n2 = 0, 1
count = 0
if nterms <= 0:
print("Wrong number priovided! It should be poditive number.")
elif n_fib == 1:
print(f"Fibonacci sequence for {n_fib}:")
print(n1)
else:
print(f"Fibonacci sequence for {n_fib}:")
while count < n_fib:
print(n1)
nth = n1 + n2
n1 = n2
n2 = nth
count += 1
Mając tak przygotowany plik, zainicjujmy nowe repozytorium i dodajmy do niego stworzony plik:
qabrio@shserver:~/commit_part$ git init
qabrio@shserver:~/commit_part$ git add sample.py
qabrio@shserver:~/commit_part$ git commit -m 'first commit'
Wprowadzanie zmian
Wprowadźmy teraz kilka zmian w naszym pliku. Pierwszą zmianą będzie wprowadzenie komentarzy, kolejną dodanie opisu do wyświetlanej liczby:
# Script to calculate elementsof Fibonacci sequence
n_fib = int(input("Provide number: "))
# initial values
n1, n2 = 0, 1
count = 0
# main part of script
# it have to be a positive number to calculate
if nterms <= 0:
print("Wrong number priovided! It should be poditive number.")
elif n_fib == 1:
print(f"Fibonacci sequence for {n_fib}:")
print(n1)
else:
print(f"Fibonacci sequence for {n_fib}:")
while count < n_fib:
print(f"Element {count}: {n1}")
nth = n1 + n2
n1 = n2
n2 = nth
count += 1
Wprowadzanie zmian
Mając tak przygotowany plik oraz wprowadzone zmiany, uznajemy, że chcemy wrzucić do repozytorium jedynie ostatnią zmianę, związaną z funkcją print. Możemy to wykonać poprzez użycie standardowego polecenia add, jednak z dodatkową flagą -p (–patch):
qabrio@shserver:~/commit_part$ git add -p sample.py
W naszym przypadku zostaniemy najpierw zapytani o pierwszą część zmian w pliku:
diff --git a/sample.py b/sample.py
index 7f98428..fd0ce72 100644
--- a/sample.py
+++ b/sample.py
@@ -1,8 +1,13 @@
+# Script to calculate elementsof Fibonacci sequence
+
n_fib = int(input("Provide number: "))
+# initial values
n1, n2 = 0, 1
count = 0
+# main part of script
+# it have to be a positive number to calculate
if nterms <= 0:
print("Wrong number priovided! It should be poditive number.")
elif n_fib == 1:
Stage this hunk [y,n,q,a,d,j,J,g,/,s,e,?]?
A po wybraniu ‚n’ (z racji, że tych zmian nie chcemy wprowadzać do repozytorium), o kolejną:
@@ -11,7 +16,7 @@ elif n_fib == 1:
else:
print(f"Fibonacci sequence for {n_fib}:")
while count < n_fib:
- print(n1)
+ print(f"Element {count}: {n1}")
nth = n1 + n2
n1 = n2
n2 = nth
Stage this hunk [y,n,q,a,d,K,g,/,e,?]?
W drugiej części mamy zmiany, które nas interesują, w związku z tym potwierdzamy wybór poprzez ‚y’. Teraz możemy łatwo sprawdzić, że tylko wybrane zmiany zostały dodane, a niechciane dalej czekają w kolejce. Uzyjemy do tego polecenie git diff:
qabrio@shserver:~/commit_part$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: sample.py
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: sample.py
qabrio@shserver:~/commit_part$ git diff sample.py
diff --git a/sample.py b/sample.py
index f329f18..fd0ce72 100644
--- a/sample.py
+++ b/sample.py
@@ -1,8 +1,13 @@
+# Script to calculate elementsof Fibonacci sequence
+
n_fib = int(input("Provide number: "))
+# initial values
n1, n2 = 0, 1
count = 0
+# main part of script
+# it have to be a positive number to calculate
if nterms <= 0:
print("Wrong number priovided! It should be poditive number.")
elif n_fib == 1:
Jak się poruszać
Teraz może kilka słów na temat, co oznaczają najwazniejsze skróty podczas wyboru zmian w obrębie pliku:
- y – dodaj zmiany
- n – pomin zmiany
- a – dodaj pokazane zmiany oraz wszystkie kolejne
- d – pomin te zmiany oraz wszystkie kolejne
- e – wejdź w tryb edycji zmian
- q – przerwij
- ? – wyświetl pomoc
Myślę, że wspomniane skróty powinny być wystarczające do podstawowego użycia. Jeśli jednak jesteście ciekawi pozostałych, odsyłam do dokumentacji danej komendy poprzez wykonanie polecenia:
git add --help
Mam nadzieję, że opisana dzisiaj funkcja przyda się w praktyce, a tym samym ułatwi pracę i oszczędzi czas. Jeśli spodobał Ci się artykuł, pamiętaj, aby zapisać się do naszego newslettera!