kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Pat Notz
Pat Notz
Question

Cum pentru a inversa se aplica o rezerva?

Am un mic patch-uri salvate în git marfa. Am'am aplicat-o pentru a-mi copia de lucru folosind git marfa aplica. Acum, am'd place să se retragă respectivele modificări prin inversă aplicarea de patch-uri (un fel de ceea cegit reveni` ar face, dar împotriva marfa).

Stie cineva cum se face acest lucru?

Clarificare: Există alte modificări în copia de lucru. Cazul meu particular este greu de descris, dar vă puteți imagina unele depanare sau experimentale codul care's in stash. Acum's amestecate în copia de lucru cu unele alte modificări și m-am'd place să văd efectul cu și fără modificări de rezerva.

Nu't arata ca marfa susține acest lucru în prezent, dar o git marfa se aplică-marșarier ar fi o caracteristică frumos.

205 2009-06-19T21:34:59+00:00 8
 smci
smci
Întrebarea editată 20 februarie 2018 в 2:35
Programare
git
git-stash
Solution / Answer
Greg Bacon
Greg Bacon
20 iunie 2009 в 3:39
2009-06-20T15:39:33+00:00
Mai mult
Sursă
Editează
#9181246

Potrivit git-stash manpage, "Un stash este reprezentat ca un comite al cărui arbore de înregistrări de stat din directorul de lucru, și primul său părinte este comis la "CAPUL" atunci când marfa a fost creat," și git rezerva show -p ne oferă "modificările înregistrate în ascunzătoarea ca un dif intre ascuns stat și originalul său părinte.

Pentru a păstra alte modificări intact, folosesc git rezerva show -p | patch-marșarier`, ca în următoarele:

$ git init
Initialized empty Git repository in /tmp/repo/.git/

$ echo Hello, world >messages

$ git add messages

$ git commit -am 'Initial commit'
[master (root-commit)]: created 1ff2478: "Initial commit"
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 messages

$ echo Hello again >>messages

$ git stash

$ git status
# On branch master
nothing to commit (working directory clean)

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   messages
#
no changes added to commit (use "git add" and/or "git commit -a")

$ echo Howdy all >>messages

$ git diff
diff --git a/messages b/messages
index a5c1966..eade523 100644
--- a/messages
+++ b/messages
@@ -1 +1,3 @@
 Hello, world
+Hello again
+Howdy all

$ git stash show -p | patch --reverse
patching file messages
Hunk #1 succeeded at 1 with fuzz 1.

$ git diff
diff --git a/messages b/messages
index a5c1966..364fc91 100644
--- a/messages
+++ b/messages
@@ -1 +1,2 @@
 Hello, world
+Howdy all

Edit:

O ușoară îmbunătățire la acest lucru este de a utiliza `git se aplică în loc de patch-uri:

git stash show -p | git apply --reverse

Alternativ, puteți utiliza, de asemenea, git aplica -R ca o prescurtare pentru git aplica --inversa.

Am'am fost într-adevăr această constatare la îndemână în ultima vreme...

Kemal Fadillah
Kemal Fadillah
Răspuns editat 17 noiembrie 2012 в 12:27
167
0
Jakub Narębski
Jakub Narębski
19 iunie 2009 в 11:22
2009-06-19T23:22:22+00:00
Mai mult
Sursă
Editează
#9181245

git stash[salvează] ia de lucru directorul cu firme de stat, iar indicele de stat, și ascunde-le departe, setare index și de zona de lucru pentru " ȘEF " versiune.

git marfa aplica aduce înapoi acele schimbări, atât git reset greu ar elimina-le din nou.

git marfa pop aduce înapoi acele schimbări și elimină partea de sus a ascuns schimba, decigit marfa [salvează]` s-ar reveni la anterior (pre-pop) de stat în acest caz.

Kemal Fadillah
Kemal Fadillah
Răspuns editat 17 noiembrie 2012 в 11:50
76
0
 salman
salman
6 noiembrie 2016 в 5:44
2016-11-06T05:44:31+00:00
Mai mult
Sursă
Editează
#9181249
git checkout -f

va elimina orice non-comite modificările.

66
0
Choco Smith
Choco Smith
23 aprilie 2015 в 6:30
2015-04-23T06:30:01+00:00
Mai mult
Sursă
Editează
#9181248

Reducere directă n pasta de din git om page L's clar formulate și include chiar și un alias;

Onu de a aplica o rezervă În unele folosesc scenarii s-ar putea să doriți să se aplice ascuns modificări, a face ceva de lucru, dar apoi onu-să aplice aceste modificări, care inițial a venit de la stash. Git nu oferă astfel o rezervă nu se aplică comanda, dar este posibil pentru a obține efectul de preluarea pur și simplu patch-uri asociate cu o rezervă și aplică-l în sens invers:

$ git stash show -p stash@{0} | git apply -R

Din nou, dacă nu specificați un stash, Git își asumă cele mai recente marfa:

$ git stash show -p | git apply -R

Poate doriți să creați un alias și în mod eficient a adăuga un stash-nu se aplică comanda la Git. De exemplu:

$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'
$ git stash apply
$ #... work work work
$ git stash-unapply
Choco Smith
Choco Smith
Răspuns editat 19 aprilie 2017 в 1:15
19
0
Slim Sim
Slim Sim
22 aprilie 2014 в 9:13
2014-04-22T09:13:26+00:00
Mai mult
Sursă
Editează
#9181247

Acest lucru este mult peste datorate, dar dacă am interpreta corect am găsit o soluție simplă, rețineți, aceasta este o explicație în propria terminologie:

git marfa [salvează] va salva departe schimbările actuale și a stabilit actuala sucursală la "curat de stat"

git ascunde lista dă ceva de genul: stash@{0}: Pe dezvolte: salvat de testare-lucruri

git aplica stash@{0} va stabili sucursala curent ca înainte marfa [salvează]

git checkout . Va stabili sucursala curent ca după marfa [salvează]

Codul care este salvat în ascunzătoarea nu este pierdut, acesta poate fi găsit prin git aplica stash@{0} din nou.

Anywhay, aceasta a lucrat pentru mine!

Mark A
Mark A
Răspuns editat 10 iulie 2018 в 6:45
13
0
 MHosafy
MHosafy
17 octombrie 2017 в 7:59
2017-10-17T19:59:51+00:00
Mai mult
Sursă
Editează
#9181250

În plus față de @Greg Bacon răspuns, în cazul în care fișierele binare au fost adăugate la index și au fost o parte din marfa folosind

git stash show -p | git apply --reverse

poate duce la

error: cannot apply binary patch to '<YOUR_NEW_FILE>' without full index line
error: <YOUR_NEW_FILE>: patch does not apply

Adăugarea de --binar rezolvă problema, dar, din păcate, am't dat seama încă de ce.

 git stash show -p --binary | git apply --reverse
1
0
 lifesoordinary
lifesoordinary
5 iunie 2018 в 4:21
2018-06-05T16:21:21+00:00
Mai mult
Sursă
Editează
#9181251

Acest lucru este în plus față de cele de mai sus răspunsuri, dar adaugă de căutare pentru git marfa pe baza mesaj ca marfa număr poate schimba atunci când noi ascunzători sunt salvate. Am scris câteva bash funcții:

apply(){
  if [ "$1" ]; then
    git stash apply `git stash list | grep -oPm1 "(.*)(?=:.*:.*$1.*)"`
  fi
}
remove(){
  if [ "$1" ]; then
    git stash show -p `git stash list | grep -oPm1 "(.*)(?=:.*:.*$1.*)"` | git apply -R
    git status
  fi
}
  1. Crea marfa cu numele (mesaj) $ git marfa salva "rezerva mea"
  2. Pentru a appply numit $ se aplică "rezerva mea"
  3. Pentru a elimina numit stash $ a elimina "rezerva mea"
0
0
 Achal
Achal
15 septembrie 2019 в 4:39
2019-09-15T16:39:44+00:00
Mai mult
Sursă
Editează
#9181252

Cum de a inversa se aplica o rezerva?

În afară de ceea ce alții au menționat, cel mai simplu mod este primul face

git reset HEAD

și apoi checkout toate modificările locale

git checkout . 
0
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
工藤 芳則
Înregistrat 6 zile în urmă
2
Ирина Беляева
Înregistrat 1 săptămână în urmă
3
Darya Arsenyeva
Înregistrat 1 săptămână în urmă
4
anyta nuam-nuam (LapuSiK)
Înregistrat 1 săptămână în urmă
5
Shuhratjon Imomkulov
Înregistrat 1 săptămână în urmă
ES
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire