2014-05-16 14 views
11

Próbuję dowiedzieć się, jak przechować dwa określone pliki wśród wielu niezatwierdzonych zmian.Git: jak używać ukrytych -p do przechowywania określonych plików?

Ta bardzo obiecująca odpowiedź, Stash only one file out of multiple files that have changed with Git?, nie pokazuje użycia i mam problemy z jej opracowaniem.

Poniższe nie działają, a strona podręcznika nie jest zbyt pomocna (wydaje się, że mówi się o wyjściu terminalu, a nie o przechowywaniu). Chcę przechować application.conf i plugins.sbt, a następnie zatwierdzić wszystko inne.

app (master)$ git status 
On branch master 
Your branch is ahead of 'origin/master' by 29 commits. 
    (use "git push" to publish your local commits) 

Changes to be committed: 
    (use "git reset HEAD <file>..." to unstage) 

     modified: views/mobile/blog.scala.html 
     modified: views/mobile/slideshow.scala.html 
     modified: ../public/css/mobile/styles.css 

Unmerged paths: 
    (use "git reset HEAD <file>..." to unstage) 
    (use "git add <file>..." to mark resolution) 

     both modified: ../conf/application.conf 

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: ../project/plugins.sbt 

app (master)$ git stash -p ../conf/application.conf ../project/plugins.sbt 

usage: git stash list [<options>] 
    or: git stash show [<stash>] 
    or: git stash drop [-q|--quiet] [<stash>] 
    or: git stash (pop | apply) [--index] [-q|--quiet] [<stash>] 
    or: git stash branch <branchname> [<stash>] 
    or: git stash [save [--patch] [-k|--[no-]keep-index] [-q|--quiet] 
         [-u|--include-untracked] [-a|--all] [<message>]] 
    or: git stash clear 

Odpowiedz

18

Zastosowanie

git stash --patch 

git pokaże się okno jak poniżej, dla każdego przystojniak w twoich możliwości popełnienia:

diff --git files over files 
index e69de29..ac4f3b3 100644 
--- a/file.txt 
+++ b/file.txt 
@@ -0,0 +1 @@ 
+you did awesome stuff! 
Stash this hunk [y,n,q,a,d,/,e,?]? 

przystojniak jest spójna edycja wierszy jak git diff produkuje to. Aby wybrać pojedynczy plik, będziesz musiał d dodawać kawałki, dopóki znajdziesz się w tym pliku, możesz dodać a ll hunks z tego pliku.

Możesz także wybrać pojedynczy kawałek, odpowiadając na pytanie z numerem y. Jeśli przystojniak wydaje się zbyt duży, możesz go nawet sklasyfikować. Możliwe jest również odtworzenie bieżącego przystojniaka.


Stosując --patch -Opcja jest możliwe na różnych poleceń (GIT F.E. stash, commit i add).

Jest to szczegółowe wyjaśnienie --patch -function, który złapałem od developers documentation:

This lets you choose one path out of a 'status' like selection. 
After choosing the path, it presents the diff between the index 
and the working tree file and asks you if you want to stage 
the change of each hunk. You can select one of the following 
options and type return: 

    y - stage this hunk 
    n - do not stage this hunk 
    q - quit; do not stage this hunk or any of the remaining ones 
    a - stage this hunk and all later hunks in the file 
    d - do not stage this hunk or any of the later hunks in the file 
    g - select a hunk to go to 
/- search for a hunk matching the given regex 
    j - leave this hunk undecided, see next undecided hunk 
    J - leave this hunk undecided, see next hunk 
    k - leave this hunk undecided, see previous undecided hunk 
    K - leave this hunk undecided, see previous hunk 
    s - split the current hunk into smaller hunks 
    e - manually edit the current hunk 
    ? - print help 
+1

lub ukryta -p git – Matthias

5

Użyj git stash -p bez argumentów. Będziesz wtedy mógł interaktywnie wybrać zmiany, które chcesz schować:

diff --git a/test b/test 
index acbd8ae..662d47a 100644 
--- a/test 
+++ b/test 
@@ -10,6 +10,7 @@ test 
(...) 
+ test 
(...) 
Stash this hunk [y,n,q,a,d,/,e,?]? 

Niestety nie jest to możliwe, aby wybrać pliki, a jedynie bryły.

Powiązane problemy