2013-03-27 6 views
29

Mam dwie zwięzłe pytania:Jak śledzić, ale nie etap, i jak odblokować, ale nie odhaczyć?

  • Jak mogę śledzić pliki, ale bez ich inscenizacji?
  • Jak mogę otworzyć pliki do zatwierdzenia, nie usuwając ich?

UWAGA:wiem, że mogę zrobić wstępna zobowiązać do śledzenia plików i zacząć stamtąd ze moje pliki śledzone. Ale czy można konkretnie zrobić to, o co pytam powyżej?

Próbowałem użyć git add -N <expr> ale śledzi plik i dodać go do popełniania:

PS C:\> git add -N fileA 
PS C:\> git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  new file: fileA 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: README.md 
#  modified: composer.lock 
#  modified: fileA 
# 

Jeśli robię git reset HEAD fileA lub git rm --cached fileA unstages niego, ale również untracks plik. To polecenie git rm fileA sugeruje użycie flagi -f, która usuwa plik fisycznie.

Czy możliwe jest tylko śledzenie, ale nie etapów, a jedynie otwieranie plików, które nie są przesyłane, lecz nie są otwierane?

+0

Jestem tylko ciekawy, jaki byłby cel tego? –

Odpowiedz

22

Aktualizacja (maj 2015)

Próbowałem użyć git add -N <expr> ale śledzi plik i dodać go do popełniania:

To już nie jest w przypadku nadchodzącego Git 2.5 (Q2 2015).
Patrz "File doesn′t get into the commit after using git add -N"


oryginalny odpowiedź (marzec 2013)

Jak mogę unstage pliki do popełniania bez ich untracking?

jest to oficjalny sposób:

git reset HEAD fileA 

Ale ponieważ jest to nowy plik, byś go untrack jak również (usunąć go z indeksu, bez odwoływania się go popełnić poprzedniego).

Uruchamianie śledzenia pliku oznacza posiadanie go w indeksie (etapie) lub zatwierdzeniu.

Zalecam utworzenie oddziału dla tych plików, aby je dodać/zatwierdzić.
Patrz "What is Tracked files and Untracked files in the context of GIT?"

  • Śledzone to pliki, które były w ostatniej migawce; mogą być niezmodyfikowane, zmodyfikowane lub zainscenizowane.
  • Nieśledzone pliki są wszystko inne - wszystkie pliki w katalogu roboczym, które nie były w ostatniej migawce i nie są w danym obszarze pomostowym (indeks)

Oznacza to, że do nowego pliku, Unstaged to oznacza, że ​​go odetnij.

tracked files in git
(Źródło: Pro Git Book, 2,2 Git Basics - Recording Changes to the Repository)
(Dziękuję, louisfischer, do aktualizacji/naprawić in the comments)

Patrz także "git - how to tell if a file is git tracked (by shell exit code)?".

+0

Czy śledzenie nowego pliku jest obowiązkowe, aby mogło być już wystawiane (dodawane do indeksu)? Mówię tylko, że nie można po prostu śledzić bez dodania nowego pliku do indeksu. Jeśli tak, to jest oczywiste, że odwrotne, poza scenariuszem, ale śledzone, można zrobić tylko wtedy, gdy pliki były już śledzone. Zgadza się ? – Jeflopo

+0

@ JesúsFlores "unstage but keep" oznacza, że ​​lokalne modyfikacje nie są usuwane, ale nie są śledzone przez git. Istniejący plik przed modyfikacją jest nadal śledzony, ponieważ został wcześniej zatwierdzony. – VonC

+0

@ JesúsFlores Edytowałem odpowiedź, aby wyjaśnić pojęcie śledzonego pliku. – VonC

1

Śledź wszystkie pliki za pomocą git add. Zatwierdź wszystkie zmiany, które chcesz zatwierdzić, i popchnij do zdalnego. Następnie ukryj nowy plik pod numerem git stash. Twój plik będzie śledzony, ale nie zostanie zatwierdzony. Tak więc w twoim przykładzie zaczniesz od odstawienia pliku A. Następnie uruchom git add README.md i git add composer.lock. git commit -m "Committing fun stuff.". Teraz musimy śledzić nowy plik bez jego przemieszczania, więc robimy po prostu git add fileA, a następnie git stash. Kiedy będziesz gotowy do zatwierdzenia pliku A, możesz uruchomić git stash pop, aby zatwierdzić/push do zdalnego.

Powiązane problemy