Frage

Ich habe eine newbie Frage zu Git:

Ich brauche hin und her in einer Geschichte von einem Ast zu bewegen. Das heißt, ich brauche sie in in einer alten Revision waren alle die Dateien in den Zustand zu versetzen, und dann muß ich im Repository auf den neuesten Stand kommen. Ich brauche nicht zu begehen.

Mit SVN, es wäre

svn up -r800

zu erhalten, Revision 800 und

svn up

synchron mit dem Repository zu erhalten.

Ich kenne den Hash-Wert des commit Ich möchte zurück zu bekommen, so dass ich versuchte,

git reset <hash>

, die mir scheint, es zu bekommen. Aber dann habe ich versucht,

git pull

aber beschwert sich über Konflikte.

Also, was ist der richtige Weg durch die Geschichte der Branche zu bewegen?

Ich bin in Bezug auf den SVN denke, hezitate also nicht, mich zu einem paar netten Tutorial zu zeigen. Beachten Sie, dass ich schon geprüft http://git.or.cz/course/svn.html und http://www.youtube.com/watch?v=8dhZ9BXQgc4 .

Danke, Ondra.

War es hilfreich?

Lösung

Nun, ich bin ein ehemaliger SVN-Benutzer auch, und jetzt git für alle meine Projekte verwenden.

Wenn git verwenden, sollten Sie die Art und Weise von der Client-Server-Architektur des Denkens, die in svn verwendet wird. In SVN muss jede Änderung eine Verbindung mit dem Server. Mit git, ist Ihr Repo im Arbeitsverzeichnis. Sie haben nicht eine Verbindung für jede Repo-Aktion müssen.

Verwenden Sie nur git push und git pull mit Repo zu synchronisieren. Denken Sie daran, rsync oder eine Backup-Lösung wie verwenden, um zwei Platz genau denselben Inhalt haben lassen. Genau wie Sie externe Backup-Festplatte anschließen, dann stellen Sie den Inhalt in es mit dem Inhalt in der Haupt gleich. Das ist die Nutzung von git pull und git push.

Wenn Sie nur hin und her, die Geschichte gehen wollen, macht das, indem es git checkout. Siehe die Revision-ID mit git history. Wenn Sie Linux verwenden, zu verwenden gitk den Revisionsbaum zu sehen. In Windows Tortoisegit kann es angezeigt Revisionsgraphen verwenden.

Um auf die neueste Version, die Verwendung git checkout master zurück. Vor jedem Befehl tun, immer machen sich git status tun. Dieser Befehl wird alles, was Sie über die aktuellen Repo-Zustand wissen müssen angezeigt werden, und welche Maßnahmen, dass Sie es richtig tun müssen, machen. Vor git pull und git push tun, es besser ist, sicher zu stellen, dass git status Ergebnis Text working directory clean enthalten.

Wenn Sie eine Datei, um es der vorherigen Revision wiederherstellen müssen, können Sie es mit git merge tun. Bevor es zu einer Datei zu tun, testen Sie es zuerst mit git diff. Ex: git diff rev1:rev2 filename. Es wird anders zwischen zwei Revisions ausdrucken. Änderung rev1 wird durch die Änderungen in rev2 ersetzt werden. So revert zu tun, wird rev2 sein die älter als rev1. Nachdem Sie mit dem diff Ergebnis zufrieden stellen, tun Sie es mit git merge, ersetzen Sie einfach diff mit merge, bleiben alle anderen Parameter gleich.

Ich hoffe, das Ihnen hilft. Der Hauptschlüssel ist zu sehen, dass Ihr Arbeitsverzeichnis Ihre Repo ist. Dieses Verständnis wird Ihnen es die volle Leistungsfähigkeit helfen verwenden git. Viel Glück.

Andere Tipps

Sie kann git checkout verwenden Sie verpflichten zur Kasse und dann verwenden, mit einem Zweignamen zu einem benannten Zweig zurück zu gehen.

git checkout mit einem Commit-ID und nicht ein Zweigname bewegen Sie aus beliebigen Namen Zweig und zu dem, was als freistehendem Kopf bekannt ist .

Wenn Sie git reset verwenden, dann wird es Ihre Branche bewegt sich zurück zu einem alten Zustand, die neueren Commits verwaist was wahrscheinlich ist, nicht das, was Sie wollen.

Die anderen Antworten sind informativ, aber ich glaube, das ist am nächsten, was die OP will:

Fügen Sie diese beiden Funktionen zu Ihrer ~ / .bashrc:

# checkout prev (older) revision
git_prev() {
    git checkout HEAD~
}

# checkout next (newer) commit
git_next() {
    BRANCH=`git show-ref | grep $(git show-ref -s -- HEAD) | sed 's|.*/\(.*\)|\1|' | grep -v HEAD | sort | uniq`
    HASH=`git rev-parse $BRANCH`
    PREV=`git rev-list --topo-order HEAD..$HASH | tail -1`
    git checkout $PREV
}

Verbrauch:

$ git_prev
Previous HEAD position was 7042c8a... Commit message2
HEAD is now at d753ecc... Commit message1

$ git_next
Previous HEAD position was d753ecc... Commit message1
HEAD is now at 7042c8a... Commit message2

Hinweis : Diese Befehle geben immer HEAD Zustand abgelöst. Wenn Sie git_prev dann git_next aus einem aktuell ausgecheckt Zweig, werden Sie wieder auf die neueste Version am Ende, aber Sie werden in frei stehende HEAD Zustand sein. Hat git checkout BRANCH_NAME, um wieder normal.

Versuchen git reflog, diese Listen Commits und Auscheckvorgänge Sie wechseln zwischen den Commits getan haben, auch die Commits Sie verloren haben, wenn der Kasse zu einem früheren begehen.
Dann können Sie versuchen, git checkout <hash of a commit> zu wechseln Sie zu dieser begehen.

Hope, das hilft!

Wenn Sie eine andere Version einer Datei Kasse, Verwendung

git checkout rev -- filename

Wo rev die ID eines verpflichten kann, der Name eines Zweiges, der Name eines Tags oder eine relative Version.

Mit git log, gitk aussehen Versionen zu prüfen, um zu sehen, welche Version der Datei, die Sie wollen.

Um diese Version der Datei dauerhaft zu machen, müssen Sie die Datei begehen: git add filename; git commit filename

Ich würde nicht empfehlen git pull Versionen zu untersuchen, weil es eine Zusammenführung tut -. Möglicherweise Ihren aktuellen Status Ändern

Sie brauchen nicht zu verwenden git reset in diesem Fall, wenn Sie eine Datei git add entscheiden Sie, nicht zu begehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top