2016-02-23 71 views
5

Ich habe ein einfaches Beispiel zum Text einige GIT-Funktionen. Nur eine Textdatei im Repository:Git Revert "Zurücksetzen ist nicht möglich, weil Sie nicht zusammengefügte Dateien haben"

1 

hinzugefügt und verpflichtet die Änderung

dann die txt geändert. Datei zu:

1 
2 

hinzugefügt und verpflichtet die Änderung

Git Protokoll ergibt folgendes Ergebnis:

commit 00e59212a6... 
.. 
second commit 

commit 7c319d587.... 
.. 
first commit 

an dieser Stelle ich die zurück zum ersten begehen gehen wollen (aber ich möchte nicht, . "Reset --hard" zu verwenden, habe ich versucht:

git revert 7c319d587 

, aber ich habe die folgende Fehlermeldung:

revert is not possible because you have unmerged files 
hint: Fix them up in the work tree, and the use "git add/rm 
hint: as appropriate to mark resolution and make a commit 

Ich bin neu in GIT - bevor ich SVN verwendet, dort kann man solche Dinge sehr einfach handhaben, so frage ich mich, ob diese einfachen Dinge ein paar Schritte in GIT müssen?

Vielen Dank für Ihre Hilfe.

+2

Es klingt wie etwas anderes hinzugefügt eine Datei (z. B. Editor Sicherungsdateien). Probiere 'git status' aus, um zu sehen, was git denkt. – slothbear

+0

git status -> Am Zweig Master; Sie setzen Commit 7c319d587 derzeit zurück. (Konflikte lösen und "git revert --continue" ausführen) (benutze git revert --abort, um den Wiederherstellungsvorgang abzubrechen); nicht zusammengefasste Pfade: (benutze "git reset Heat .." um zu deaktivieren); von ihnen: test.txt; keine Änderungen hinzugefügt zu commit (verwenden Sie "git add" und/"git commit -a) –

Antwort

2

Nun, ich habe versucht, was Sie denken, Sie haben, um genau das tun, was Sie

schrieb
cd /tmp 
mkdir so35588521 
cd so35588521 
git init 
# Initialized empty Git repository in /tmp/so35588521/.git/ 
touch 1 
echo "1" > 1 
git add . 
git commit -m "first" 
# [master (root-commit) 173f431] first 
# 1 file changed, 0 insertions(+), 0 deletions(-) 
# create mode 100644 1 
touch 2 
touch 3 
git add . 
git commit -m "second" 
# [master a9fdcc9] second 
# 2 files changed, 0 insertions(+), 0 deletions(-) 
# create mode 100644 2 
# create mode 100644 3 
git log 
# commit a9fdcc9338c9b3de25c211580a35ab63d1d57c2e 
# Author: Me and my email 
# Date: Tue Feb 23 22:46:50 2016 +0100 
git revert a9fd 
# [master dd5a86e] Revert "second" 
# 2 files changed, 0 insertions(+), 0 deletions(-) 
# delete mode 100644 2 
# delete mode 100644 3 

wie Sie sehen können - alles gut gegangen ist. So dachte ich, AHA! Sie/er muss etwas anderes gemacht haben, und vernachlässigte es auf SO zu erwähnen. Naja, ich werde herausfinden, was sie mit meiner Kristallkugel gemacht hat. Um was geht es, wenn es umsonst herumliegt?

Also, fusionieren, git sagte. Dann machen wir einen Zweig und versuchen, ihn mit unserem Hauptzweig zu verbinden. Jetzt

git checkout -b a_branch 
# Switched to a new branch 'a_branch' 
echo "2" > 1 
git status 
# On branch a_branch ... 
git add . 
git commit -m "third" 
# [a_branch 96d3a7a] third 
# 1 file changed, 1 insertion(+), 1 deletion(-) 
git checkout master 
# Switched to branch 'master' 
echo "3" > 1 
git add . 
git commit -m "fourth" 
# [master 7f72eec] fourth 
# 1 file changed, 2 insertions(+), 1 deletion(-) 
#### Now we have first commit, and second, and revert second, and two commits: third on **a_branch** branch and fourth on **master**. 
git merge a_branch 
# Auto-merging 1 
# CONFLICT (content): Merge conflict in 1 
# Automatic merge failed; fix conflicts and then commit the result. 
# *Oh DANG* whyy? Git stop, don't do that it hurts, revert! 
git revert last_commit_id_from_git_log 
# error: revert is not possible because you have unmerged files. 
# hint: Fix them up in the work tree, and then use 'git add/rm <file>' 
# hint: as appropriate to mark resolution and make a commit. 
# fatal: revert failed 
# *Git nope!* 

, das war nur raten mir, und ein wenig Humor zu SO bringen, hoffe ich. Wenn dies NICHT das ist, was Sie getan haben, können Sie uns bitte genaue Schritte sagen, die Sie getan haben? Da ich Fehler nicht replizieren kann hast du, und somit fühle ich mich unerfüllt, nicht in der Lage zu sein, zu höllen.

EDIT:

Da OP besteht darauf, dass auf keinen Fall eine Zweigniederlassung hat ...

rm * 
rm -rf .git 
git init 
echo -e "line one\n" > 1 
git add . 
git ci -m "first" 
echo -e "line two\n" >> 1 
git ci -a -m "second" 
git log 
# commit 23d710610d98c1046844870557208f335e76a933 
# Author: ME <[email protected]> 
# Date: Tue Feb 23 23:31:28 2016 +0100 
# 
#  second 
# 
# commit 22873fb5fbf06d80a1779fe6740060c660d68714 
# Author: ME <[email protected]> 
# Date: Tue Feb 23 23:30:47 2016 +0100 
# 
# first 

git revert "first" 
# fatal: bad revision 'first' # but OK i assume You used id, so, 
git revert 22873fb5fbf06d80 
# error: could not revert 22873fb... first 
# hint: after resolving the conflicts, mark the corrected paths 
# hint: with 'git add <paths>' or 'git rm <paths>' 
# hint: and commit the result with 'git commit' 

Ahaaa, bekam ich es jetzt! Und das ... ist bizaare.

Ok, ich habe überprüft und tatsächlich haben Sie Recht, auf meinem git --version 2.6.3 Ich könnte dieses Verhalten replizieren. Eigentlich glaube ich, dass du hier in einen recht eckigen Fall gegangen bist. Was passiert ist, ist, dass Git nach dem zweiten Commit die Änderungen, die Sie an der Datei test.txt vorgenommen haben, gespeichert und diese Änderungen behalten hat. Jetzt haben Sie ihm (it?) Zu git revert first_commit_id, die tatsächlich Datei test.txt erstellt. Ich kann es nicht genau sagen, aber das scheint für mich ein kleiner Fehler zu sein.

Jedoch! Wenn Sie im zweiten Commit - Datei hinzufügen, zum Beispiel test2.txt (damit Sie zwei Dateien in Git Repository versioniert haben), dann funktioniert revert funktioniert.

+0

:) danke: 1) erstellt eine TXT-Datei/hinzugefügt/committed 2) eine zweite Zeile zu dieser Datei hinzugefügt/gespeichert/hinzugefügt/commited 3) git revert "first commit" -> habe Fehler: ist nicht möglich, weil Sie nicht zusammengefügte Dateien haben 4) Ich habe nie geändert oder einen neuen Zweig erstellt 5) git status -> Am Zweig Master, Sie sind derzeit commit 7c319d587 zurück. (Konflikte lösen und "git revert --continue" ausführen) (benutze git revert --abort, um den Wiederherstellungsvorgang abzubrechen); nicht zusammengefügte Pfade: (benutze "git reset Heat .." um sie zu deaktivieren); dediziert von ihnen: test. txt; keine Änderungen zum Commit hinzugefügt (benutze "git add" und/oder "git commit -a) –

+0

Lass mich einfach hinzufügen, um zu antworten, damit Du bestätigen kannst, dass Du genau das getan hast. Ich kann immer noch nicht replizieren, was du getan hast. – JustMe

+0

Also, da ich es replizieren kann, und diesen kleinen Bug in Betracht ziehe, werde ich eine Bug-Anfrage für git maintainers (nach Überprüfung des blutenden Rand-Git) ausgeben, außer du willst :) – JustMe