2012-07-18 12 views
6

że mam plik w repo git:Prowadzenie lokalnych zmian w repo git

#file.py 

setting1 = default1 
setting2 = default2 

<some code> 

teraz chcę dokonać pewnych zmian lokalnych, które nie się zepchnięci z powrotem do repo

#file.py - local change 

setting1 = mysetting1 
setting2 = mysetting2 

<some code> 

Powiedzmy, że w przyszłości repozytorium aktualizacji zostanie zaktualizowane, a ja chcę je usunąć, nie psując ustawień lokalnych. IE polecenie git mogę uruchomić które zaktualizować plik tak, że byłoby

#file.py - updated copy 

setting1 = mysetting1 
setting2 = mysetting2 

<new code> 

Czy istnieje jakiś sposób, aby to zrobić, albo z oddziałami lub jakaś inna funkcja git gdzie nie mam umieścić ustawienia lokalne w osobnym pliku?

Widziałem kilka innych podobnych pytań, ale koncentrują się one na wykluczeniu całego pliku.

Dzięki

Odpowiedz

2

Spójrz na git stash. Jest to również metoda "całego pliku", ale może się okazać, że jest wystarczająco elastyczna.

W przeciwnym razie, przy użyciu git gui i dużo przebazowania (git rebase --interactive) lub cherry-picking (git cherry-pick) lub po prostu gałąź boczną powinno pomóc.

+0

Dzięki. Właściwie ukrywanie ** nie ** powoduje scalanie plików, co ma taki sam wpływ na plik. Uważam, że posiadanie lokalnego oddziału i przekwalifikowanie się na najbardziej wiarygodne, ponieważ wydaje się, że łatwo byłoby zgubić skrytkę, a zatem wszystkie moje zmiany. – korylprince

+0

Och, nigdy nie chciałem sugerować, że się nie łączy. Chciałem tylko powiedzieć, że nie możesz zapisać części zmian (odrzucając resztę) w pliku za pomocą jednego polecenia. – fork0

+0

Jedynym problemem związanym z tymi wszystkimi metodami jest to, że git merge zawsze ma konflikt, jeśli linia jest dodawana bezpośrednio pod edytowaną. Na przykład, jeśli mam kod taki jak powyżej i mam dodać "setting3 = default" poniżej setting2 w gałęzi origin, to rebase (lub każda inna metoda) zawiedzie z powodu konfliktu, ale jeśli dodaję linię między tymi dwoma, robi to podstawą lub cokolwiek w porządku. Każdy pomysł, dlaczego? – korylprince

3

To, co robisz, prawdopodobnie zmienia ciągi połączeń i takie. Jest to coś, co jest lokalne dla twojego środowiska. Właściwym sposobem radzenia sobie z tym problemem są smudge/clean scripts. Spójrz na "Git Attributes" chapter in the Pro Git book (dostępny bezpłatnie).

+0

Bez względu na to, czy okaże się to, czego potrzebuje, czy nie, dziękuję za powiązanie z tym, całkiem sprytny. – R0MANARMY

+0

Dzięki za odpowiedź. Nie sądzę, że potrzebuję czegoś tak potężnego, ale może się później przydać. – korylprince