2010-04-26 5 views

Antwort

8

Nur:

git clone $url 

Im Ernst! Das ist der beste Weg.

Sie könnten alle Arten von git reset und git branch Befehle ausführen, um die Refs zu verschieben, aber der einzige Zweck wäre, Ihre Commits irgendwo in Ihrem lokalen Repository für zukünftige Referenz zu halten. Wenn das das Ziel ist, behalte einfach das gesamte Repository und kloniere den Ursprung neu.

Um alle Änderungen auf nur einen Zweig zu akzeptieren, foo:

git checkout foo 
    git fetch origin +refs/heads/foo:refs/remotes/origin/foo 
    git reset refs/remotes/origin/foo 

foo jetzt auf dem gleichen wie foo auf origin begehen verweisen. Wenn Sie die Dateien in Ihrem Arbeitsverzeichnis löschen möchten, fügen Sie --hard zu git reset hinzu. Wenn Sie zuerst zusammenführen möchten, ersetzen Sie fetch durch pull.

Möglicherweise haben Sie in Ihrem lokalen Repo eine Reihe von dangling commits, die möglicherweise irgendwann aufräumen, aber für eine Weile können Sie noch über den Reflog darauf zugreifen.

+0

Gut zu wissen :-) –

+1

Es gibt ein riesiges Problem damit: Ich habe viele * Ergänzungen * zum funktionierenden Baum. Ich möchte nur alle Änderungen akzeptieren/anwenden, die an der Fernbedienung vorgenommen wurden. Ich möchte nicht den ganzen Zustand meiner gegenwärtigen Arbeit wegwerfen. Das funktioniert also nicht als Antwort für mich. – rfay

+0

@Randy, das ist eine andere Frage, aber eine gute Frage. – cdunn2001

0

Hier ist der Ansatz, den ich verwendet habe, der in Ordnung zu sein scheint. Ich habe einen Zweig namens "ihr", der die neue Version von allem in der Fernbedienung enthält. Eine Version namens "unsere" basiert auf einer älteren Version, die zu viele irrelevante Änderungen enthält, aber viele Zusätze (neue Unterverzeichnisse von Seiten/alle), die ich behalten möchte.

git checkout ours 
git checkout theirs -- *.php *.txt *.config modules themes includes scripts 
git commit -m "New version with all new key files from 'theirs'" 

Solange ich die Liste der Dateien und Verzeichnisse in der zweiten Kasse richtig gelesen habe, sollte dies in Ordnung sein.

Wenn ich wollte, dass die Geschichte auf dem "ihren" Zweig basiert, möchte ich das vielleicht anders herum machen.

+0

Randy, Sie können diesen Kommentar bearbeiten und dann jede Codezeile um 8 Leerzeichen einrücken (vielleicht 4?), Um zu zeigen, was Sie besser meinen. '--ours' und '--theirs' sind gültige Flags, daher sollten Sie verschiedene Wörter für die Darstellung von Zweignamen verwenden. Aber ja, die Angabe von Pfaden erlaubt es ihm, nur diese Dateien zu bekommen. – cdunn2001

5

Oder:

git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git checkout --theirs 
git status | grep "both " | cut -f2 | cut -f11 -d" " | xargs git add 

, die alle in Konflikt stehenden Remote-Dateien zwingt zu akzeptieren.

Verwandte Themen