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

Я действительно новичок в git, и я пытался понять, почему git продолжает показывать, что я изменил в одной ветке в другой ветке, когда я запускаю git checkout для переключения между ветвями. Сначала я попытался не с помощью git добавить и не работать. Тем не менее, я попытался использовать 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" перед переключением между ветвями, чтобы избежать этого?

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

Даже я столкнулся с той же проблемой. Вы должны совершить любые изменения, если у вас есть. Поменяйте ветку и вытяните новые изменения. Даже удалите папку node_modules, если вы не добавили в gitignore. После получения новых изменений запустите npm i. Он должен работать.