Создание нового файла в новой ветке Git - PullRequest
0 голосов
/ 30 октября 2019

Я все еще экспериментирую с Git.

Сейчас у меня есть только локальная ветка master и удаленная ветка origin/master на Gitlab.

Что я делалдо сих пор:

  • Код чего-то нового на master
  • Выполнение git commit -m "added something new"
  • Выполнение git push origin master

Я хотелчтобы создать новую ветку, я сделал:

  • git checkout -b newBranch

После этой команды я уже "проверен" на моей новой ветке, верно? И я могу подтвердить это с помощью git branch -a

Итак, я создал новый файл (с помощью проводника файлов VSCode) example.txt (в моей новой ветке).

И тогда я сделал:

  • git checkout master

Так что я мог вернуться к своей master ветви.

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

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

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

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

Есть слово предупрежденияэто идет с этим: файл, который передан в одной ветви, мог бы не существовать в другой ветви. Например, если вы вернетесь к newBranch и подтвердите свой файл

git checkout newBranch
git add example.txt
git commit

, теперь example.txt существует в newBranch, но не в master. Если вы извлечете master, файл исчезнет, ​​как вы и ожидали.

Это означает, что если на master вы создадите еще один example.txt (в том же каталоге, чтобы путь был точното же самое), этот новый файл не отслеживается, даже если тот же путь относится к существующему, зафиксированному файлу в другой ветви.

Если вы затем попытались оформить заказ на newBranch, git должен отказаться с предупреждением о том, что у вас естьданные, которые будут потеряны при проверке.

На самом деле это всего лишь один особый случай "попытки изменить ветки с помощью незафиксированных изменений", но стоит знать об этой текущей задаче.

0 голосов
/ 30 октября 2019

Другое возможное решение:

Вы можете использовать команду stash из git.

Что делает git stash?

git stash используется для буфера обмена для ваших изменений.

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

Пример:

git stash

Ваша рабочая копия теперь чистая: все незафиксированные локальные изменения были сохранены в этом виде"буфера обмена", который представляет Git's Stash. Вы готовы начать новое задание (например, вытягивая изменения из удаленных или просто переключая ветки).

Допустим, что:

  1. Вы создали один файл example.txt в веткеnewBranch.
  2. Теперь необходимо срочно переключить другой мастер ветки, а затем перед переключением просто применить следующую команду.

    git add example.txt

    git stash

  3. Теперь при переключении мастера. Затем файл example.txt исчезнет.

  4. Когда вы вернетесь в свою ветку newBranch, примените следующую команду.

    git stash apply

тогда вы можете увидеть файл example.txt.

...