Почему git продолжает показывать мои изменения, когда я переключаю ветки (измененные, добавленные, удаленные файлы), независимо от того, запускаю я git add или нет? - PullRequest
105 голосов
/ 03 апреля 2011

Я действительно новичок в git, и я пытался понять, почему git продолжает показывать то, что я изменил, в одной ветви в другой ветви, когда я запускаю git checkout для переключения между ветками. Сначала я попытался не использовать git add и didn ' т работа. Тем не менее, я попытался использовать git add, но не решил проблему. Я пока не использую git commit.

Это в основном то, что я делаю:

$ git clone <a_repository>  
$ git branch  
* master  
$ git branch testing  
$ git checkout testing  
...edit a file, add a new one, delete...  
$ git status  
    # On branch testing  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
$ git branch  
  master  
* testing  
$ git checkout master  
D       file1.txt  
Switched to branch 'master'  
$ git status  
    # On branch master  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  

Я думал, что при использовании веток, что бы вы ни делали в одной ветке, это невидимо для всех других веток. Не в этом ли причина создания веток?

Я пытался использовать "git add", но изменения видны в обеих ветках. Нужно ли запускать «git commit» перед переключением между ветками, чтобы избежать этого?

Ответы [ 2 ]

127 голосов
/ 03 апреля 2011

Переключение филиалов несет незафиксированные изменения с вами.Либо зафиксируйте сначала, выполните git checkout ., чтобы отменить их, либо выполните git stash перед переключением.(Вы можете вернуть свои изменения с помощью git stash apply)

28 голосов
/ 03 апреля 2011

Краткий ответ: да, вам нужно совершить. Удостоверьтесь, что вы делаете это на правильной ветви, хотя!

Ветвь - это указатель на коммит. Когда вы фиксируете с извлеченной веткой, ветка продвигается, чтобы указать на эту новую фиксацию. Когда вы проверяете ветку, вы проверяете коммит, на который он указывает. (Вы можете думать о коммитах как о снимках вашего рабочего дерева.)

Итак, если у вас есть изменения, которые вы не зафиксировали, они не будут затронуты переключением веток. Конечно, если переключение ветвей несовместимо с вашими изменениями, git checkout просто откажется это сделать.

git add - это команда для внесения изменений, которую вы затем будете фиксировать. Он не записывает эти изменения в историю хранилища. Это просто помещает их в область подготовки (индекс); git commit затем использует содержимое этой промежуточной области для создания коммитов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...