![Git-Push-Fehler '[remote rejected] master -> master (Zweig ist derzeit ausgecheckt)' 1 Git Push Fehler remote rejected master master Zweig ist derzeit ausgecheckt](https://www.viresist.org/wp-content/uploads/Git-Push-Fehler-remote-rejected-master-master-Zweig-ist-derzeit-ausgecheckt.png)
hap497
Gestern habe ich eine Frage zum Klonen eines Git Repository von einer meiner Maschinen zu einer anderen, Wie kann ich von einer anderen Maschine aus git klonen?.
Ich kann jetzt erfolgreich ein Git-Repository von meiner Quelle (192.168.1.2) zu meinem Ziel (192.168.1.1) klonen.
Aber wenn ich eine Datei bearbeitet habe, a git commit -a -m "test"
und ein git push
erhalte ich diesen Fehler an meinem Ziel (192.168.1.1):
git push
hap@192.168.1.2's password:
Counting objects: 21, done.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1010 bytes, done.
Total 11 (delta 9), reused 0 (delta 0)
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: with what you pushed, and will require 'git reset --hard' to match
error: the work tree to HEAD.
error:
error: You can set 'receive.denyCurrentBranch' configuration variable to
error: 'ignore' or 'warn' in the remote repository to allow pushing into
error: its current branch; however, this is not recommended unless you
error: arranged to update its work tree to match what you pushed in some
error: other way.
error:
error: To squelch this message and still keep the default behaviour, set
error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git+ssh://hap@192.168.1.2/media/LINUXDATA/working
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git+ssh://hap@192.168.1.2/media/LINUXDATA/working'
Ich verwende zwei verschiedene Versionen von Git (1.7 auf dem Remote- und 1.5 auf dem lokalen Computer). Ist das ein möglicher Grund?
![Git-Push-Fehler '[remote rejected] master -> master (Zweig ist derzeit ausgecheckt)' 2 Git Push Fehler remote rejected master master Zweig ist derzeit ausgecheckt](https://www.viresist.org/wp-content/uploads/Git-Push-Fehler-remote-rejected-master-master-Zweig-ist-derzeit-ausgecheckt.jpeg)
Robert Gould
Ich hatte gerade den gleichen Fehler, als ich anfing zu lernen Git. Einige der anderen Antworten sind eindeutig nichts für Git-Neulinge!
Ich werde nicht technische Begriffe verwenden, um die Idee zu vermitteln. Wie auch immer, was passiert ist, dass Sie zwei Repositories haben, eines ist das Original, das Sie zuerst erstellt haben, und das andere die Arbeit, die Sie gerade erstellt haben.
Sie befinden sich gerade in Ihrem Arbeitsrepository und verwenden die master
sich verzeigen. Aber Sie sind auch in Ihrem ursprünglichen Repository bei demselben “eingeloggt”. master
sich verzeigen. Da Sie jetzt im Original „eingeloggt“ sind, befürchtet Git, dass Sie etwas vermasseln könnten, weil Sie am Original arbeiten und Dinge vermasseln könnten. Sie müssen also zum ursprünglichen Repository zurückkehren und dies tun git checkout someotherbranch
und jetzt können Sie ohne Probleme drücken.
![Git-Push-Fehler '[remote rejected] master -> master (Zweig ist derzeit ausgecheckt)' 3 1646882292 898 Git Push Fehler remote rejected master master Zweig ist derzeit ausgecheckt](https://www.viresist.org/wp-content/uploads/1646882292_898_Git-Push-Fehler-remote-rejected-master-master-Zweig-ist-derzeit-ausgecheckt.png)
Nirgendwo, Mann
Zusammenfassung
Sie können nicht auf den einen ausgecheckten Zweig eines Repositorys pushen, da dies den Benutzer dieses Repositorys auf eine Weise durcheinander bringen würde, die höchstwahrscheinlich mit enden wird Verlust von Daten und Verlauf. Sie können jedoch auf jeden anderen Zweig desselben Repositorys pushen.
Da bei Bare-Repositories niemals ein Branch ausgecheckt ist, können Sie immer auf jeden Branch eines Bare-Repositorys pushen.
Je nach Bedarf gibt es mehrere Lösungen.
Lösung 1: Verwenden Sie ein Bare-Repository
Wie vorgeschlagen, wenn Sie auf einem Computer das Arbeitsverzeichnis nicht benötigen, können Sie in ein Bare-Repository wechseln. Um zu vermeiden, dass Sie mit dem Repository herumspielen, können Sie es einfach klonen:
machine1$ cd ..
machine1$ mv repo repo.old
machine1$ git clone --bare repo.old repo
Jetzt können Sie alles, was Sie wollen, an die gleiche Adresse wie zuvor pushen.
Lösung 2: An einen nicht ausgecheckten Branch pushen
Aber wenn Sie den Code auf Ihrer Fernbedienung überprüfen müssen <remote>
, dann können Sie einen speziellen Zweig zum Pushen verwenden. Nehmen wir an, Sie haben in Ihrem lokalen Repository Ihre Fernbedienung aufgerufen origin
und du bist auf branch master. Dann könntest du es tun
machine2$ git push origin master:master+machine2
Dann müssen Sie es zusammenführen, wenn Sie in der sind origin
Remote-Repo:
machine1$ git merge master+machine2
Autopsie des Problems
Wenn ein Branch ausgecheckt wird, fügt das Commit ein neues Commit mit dem Head des aktuellen Branch als übergeordnetes Element hinzu und verschiebt den Head des Branch zu diesem neuen Commit.
Damit
A ← B
↑
[HEAD,branch1]
wird
A ← B ← C
↑
[HEAD,branch1]
Aber wenn jemand zwischendurch auf diesen Zweig pushen könnte, würde der Benutzer selbst in das hineinkommen, was Git aufruft abgetrennter Kopf Modus:
A ← B ← X
↑ ↑
[HEAD] [branch1]
Jetzt befindet sich der Benutzer nicht mehr in Zweig 1, ohne explizit darum gebeten zu haben, einen anderen Zweig auszuchecken. Schlimmer noch, der Benutzer ist jetzt außerhalb jeder Filialeund jeder neue Commit wird einfach sein baumeln:
[HEAD]
↓
C
↙
A ← B ← X
↑
[branch1]
Wenn der Benutzer an diesem Punkt einen anderen Zweig auscheckt, wird dieser baumelnde Commit hypothetisch zu einem fairen Spiel für Git Müllsammler.
![Git-Push-Fehler '[remote rejected] master -> master (Zweig ist derzeit ausgecheckt)' 4 1646882292 636 Git Push Fehler remote rejected master master Zweig ist derzeit ausgecheckt](https://www.viresist.org/wp-content/uploads/1646882292_636_Git-Push-Fehler-remote-rejected-master-master-Zweig-ist-derzeit-ausgecheckt.png)
André Holzner
Sie können diese “Einschränkung” umgehen, indem Sie die bearbeiten .git/config
auf dem Zielserver. Fügen Sie Folgendes hinzu, damit ein Git-Repository gepusht werden kann, selbst wenn es “ausgecheckt” ist:
[receive]
denyCurrentBranch = warn
oder
[receive]
denyCurrentBranch = false
Der erste lässt den Push zu, während er vor der Möglichkeit warnt, den Zweig zu beschädigen, während der zweite ihn einfach stillschweigend zulässt.
Dies kann verwendet werden, um Code auf einem Server “bereitzustellen”, der nicht zum Bearbeiten bestimmt ist. Dies ist nicht der beste Ansatz, aber ein schneller für die Bereitstellung von Code.
git config --local receive.denyCurrentBranch updateInstead
https://github.com/git/git/blob/v2.3.0/Documentation/config.txt#L2155
Verwenden Sie das auf dem Server-Repository, und es aktualisiert auch den Arbeitsbaum, wenn kein nicht verfolgtes Überschreiben stattfinden würde.
Es wurde hinzugefügt Git 2.3 wie von VonC in den Kommentaren erwähnt.
Ich habe Git 2.3 kompiliert und ausprobiert. Beispielnutzung:
git init server
cd server
touch a
git add .
git commit -m 0
git config --local receive.denyCurrentBranch updateInstead
cd ..
git clone server local
cd local
touch b
git add .
git commit -m 1
git push origin master:master
cd ../server
ls
Ausgabe:
a
b
Yay, b
wurde geschoben!
9858800cookie-checkGit-Push-Fehler ‘[remote rejected] master -> master (Zweig ist derzeit ausgecheckt)’yes
Kann jeder Oldtimer die akzeptierte Antwort auf stackoverflow.com/a/9283833/397872 ändern und den Thread ins Archiv verschieben oder so? Oder den Besitzer wechseln oder was auch immer?
– Jacek Krysztofik
16. September 2012 um 18:28 Uhr
Sie haben jetzt tatsächlich eine sichere Möglichkeit, mit Git 2.3.0 (Februar 2015) und
git config receive.denyCurrentBranch=updateInstead
: stackoverflow.com/a/28262104/6309– VonC
1. Februar 2015 um 12:37 Uhr
Das ist der neue Link des Buches, das @stigi erwähnt hat: git-scm.com/book/en/v1/Git-on-the-Server
– Abdelilah El Aissaoui
19. August 2016 um 7:01 Uhr
Mögliches Duplikat von Was ist diese Git-Warnmeldung, wenn Änderungen an ein Remote-Repository übertragen werden?
– Trevor Boyd Smith
18. September 2018 um 16:35 Uhr
Aber ich verstehe nicht, warum und wie es funktioniert? Es funktioniert, ja, aber das ist alles.
– Tilak Maddy
20. Juni 2019 um 18:03 Uhr