2017-03-17 1 views
0

Ich bin verwirrt über Git-Verzweigung Verhalten.Werden Codeänderungen in verschiedenen Zweigen beibehalten?

Ich habe diese git Repo:

$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 
nothing to commit, working tree clean 

ich eine lokale Niederlassung in etwa so:

$ git checkout -b foo 
Switched to a new branch 'foo' 
$ git branch 
* foo 
    master 
$ git status 
On branch foo 
nothing to commit, working tree clean 

Jetzt wechsle ich die README.md Datei.

$ date >> README.md 
$ git status 
On branch foo 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: README.md 

no changes added to commit (use "git add" and/or "git commit -a") 

Jetzt springe ich wie so zu meinem Herrn Zweig zurück:

$ git checkout master 
M README.md 
Switched to branch 'master' 
Your branch is up-to-date with 'origin/master'. 

Aber wenn ich ein Git-Status sehe ich, dass die README.md Datei, um die Änderung von meinem foo Zweig hat! Sollte ich nicht die unmodifizierte Version der Datei README.md sehen? Was mache ich hier falsch?

$ git status 
On branch master 
Your branch is up-to-date with 'origin/master'. 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: README.md 


no changes added to commit (use "git add" and/or "git commit -a") 
$ tail README.md 
# README.md 
----------- 

Meanvoy is just an idea I had to replace envoy with facter and 
a mean stack backend. 
Fri Mar 17 13:43:04 PDT 2017 
+1

Sie haben die Readme-Datei nicht an Ihre Zweigstelle übergeben und auch nicht inszeniert. Du brauchst 'git add ' und 'git commit' auf dem Zweig, um es dauerhaft dort zu haben. –

+0

Ah! Das hat den Effekt, nach dem ich suche. Ich wollte einfach nichts dauerhaftes in meinem Foo-Zweig machen. Vielen Dank. –

Antwort

3

Lassen Sie uns zunächst für eine Sekunde überlegen, was passiert, wenn Sie einen anderen Zweig Kasse und modifiziert keine Dateien.

Wenn Sie das tun, wird Git zuerst verschieben HEAD an den neuen Ort in der Geschichte, dieser andere Zweig, dann Git wird Ihren Arbeitsordner zu aktualisieren, um den Zustand aller Dateien nach diesem anderen Zweig enthalten.

Wenn Sie beispielsweise einen Feature-Zweig auschecken, wird Ihr Arbeitsordner aktualisiert, um den aktuellen Status dieses Feature-Zweigs anzuzeigen. Klingt soweit gut? Gut.

Was passiert nun, wenn Sie vor dem Auschecken dieses anderen Zweigs eine Datei ändern?

Nun, Git will, wenn nicht ausdrücklich gesagt, versuchen, Ihre Änderungen zu verlieren. Also, was sollte es tun? Weigern Sie sich, diesen anderen Zweig zu überprüfen, weil Sie einige Dateien geändert haben, aber sie nicht festgeschrieben haben?

Nein, Git wird stattdessen versuchen, um die Änderungen mitzubringen.

Es wird nur dann gemacht, wenn es sicher ist. Wenn die Dateien zwischen den beiden Zweigen divergieren, git wird entlang der Linien von

$ git checkout feature/x 
error: Your local changes to the following files would be overwritten by checkout: 
     test1.txt 
Please commit your changes or stash them before you switch branches. 
Aborting 

Die Tatsache, mit einem Fehler ablehnen, dass es nicht bedeutet, dass die Datei „sicher“ war zusammen in diesen neuen Zweig zu bringen. Noch modifiziert. Noch nicht festgeschrieben.

Sie müssen entscheiden, was mit der Datei zu tun ist. Wenn Sie wollten, dass es auf dem vorherigen Zweig "bleibt", sollten Sie es vor dem Auschecken des neuen Zweigs wahrscheinlich festgeschrieben haben.

Verwandte Themen