2016-04-18 7 views
1

Mein git wurde irgendwie durcheinander gebracht. Das Problem hat zwei Stufen:git nicht zu remote nach dem Erstellen eines neuen Zweigs schieben

1) ich einen Zweig erstellt perf_test genannt, einige Änderungen vorgenommen. Ich wollte die Änderungen in der neuen Filiale behalten, aber ich ging zum Master zurück, um zu prüfen, wie es war. Im Master habe ich festgestellt, dass die Änderungen von perf_test im Git-Status des Masters angezeigt wurden.

> git checkout -b perf_test 
> touch /path/to/foo.txt 
> git status 
Uncommitted changes 
modified /path/to/foo.txt 
> git checkout master 
> git status 
Uncommitted changes 
modified /path/to/foo.txt 

Ich verstehe nicht, warum diese Änderungen im Master nach dem Wechsel zum Master angezeigt werden.

2) Ich öffnete dann alle Änderungen in perf_test und ging auf einige andere Änderungen in perf_test zu machen (dies war nicht beabsichtigt - ich dachte, dass ich in Meister war, aber in perf_test - aber das ist nicht wichtig)

> git checkout perf_test 
> git rm /path/to/foo.txt 
> git status 
...clean... 
> touch /path/to/bar.txt 
> git commit -am "changed bar.txt" 
...committed... 
> git branch 
... 
*perf_test 
... 
> git checkout master 
> git push origin master 
Everything up-to-date 
> git push heroku master 
Everything up-to-date 

Ich erwarte, dass die Änderung zu bar.txt zum Ursprung und zu heroku geschoben werden muss - aber beide berichten, dass sie aktuell sind, wenn ich weiß, dass sie nicht sind (die Änderungen wurden nie zu irgendeinem Fernsteuerungsschalter gedrängt).

ich die bar.txt Änderung meiner Fernbedienung drücken wollen - wie es zu tun?

Antwort

1
  1. In Ihrer ersten Liste von Befehlen, Sie zu jedem Zweig nie begangen, so etwas Sie in git status Ausgabe begehen die Differenz zwischen dem aktuellen sah wurden (HEAD) und das Arbeitsverzeichnis. Wenn Sie Verzweigungen mit git checkout wechseln, versucht git, alles zu tun, um Änderungen im Arbeitsverzeichnis auszusetzen. Plus, da Sie nichts zu perf_test nach der Erstellung von master verpflichtet hatte, war perf_test immer noch identisch mit master, so ist es nicht verwunderlich, dass Sie die gleichen Ergebnisse während auf perf_test wie während auf master sehen würden.

  2. Ich nehme an, Sie touch /path/to/bar.txt eingegeben haben, nicht git touch, aber OK. Sie haben eine Änderung bar.txt und verpflichtet, dass die Änderung der perf_test Zweig, aber dann schob man master (die unverändert war und enthielt nicht die aktualisierte bar.txt) zu Herkunft und Heroku. Möchten Sie Ihren lokalen Zweig perf_test an den Remote-Zweig master? Wenn ja, ist die Syntax git push origin perf_test:master (und ähnlich für heroku).

+0

Bekam es auf 1. Ja, es war Touch, nicht git touch - wird behoben. Und das hilft - was ich tun möchte ist, die Änderung in bar.txt von perf_test in den Master zu mischen, und dann den Master zu übernehmen und vom Master zu drücken. Ich denke es funktioniert, wie beschrieben. Vielen Dank! – Anand

+0

OK, in diesem Fall fehlt nur noch 'git merge perf_test' nach der Zeile' git checkout master'. Sie müssen sich danach nicht mehr an den Master binden, da der Befehl 'git merge' den Merge-Commit für Sie erstellt (es sei denn, es liegt ein Merge-Konflikt vor). – kini

+0

Danke, das war sehr nützlich! – Anand

Verwandte Themen