Ответ 1
Неважно, какая ветка вы используете, когда добавляете файл, только когда вы его совершаете. Поэтому, если вы это сделаете:
git add file
git checkout master
git commit
Вы передали файл основной ветке.
Вот полный пример, с выходом. Мы начинаем с нового репозитория:
$ git init
Initialized empty Git repository in /home/lars/tmp/so/repo/.git/
На этом этапе мы находимся в ветке master
, и мы еще не добавили никаких файлов. Добавьте файл:
$ date > file1
$ cat file1
Fri May 11 13:05:59 EDT 2012
$ git add file1
$ git commit -m 'added a file'
[master (root-commit) b0764b9] added a file
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file1
Отлично, теперь у нас есть ветвь (master
) с одной фиксацией. Позвольте создать новую ветку:
$ git checkout -b foo
Switched to a new branch 'foo'
$ git branch
* foo
master
$ ls
file1
Теперь мы добавим строку в file1
.
$ date >> file1
$ 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: file1
#
no changes added to commit (use "git add" and/or "git commit -a")
Это показывает, что файл был изменен, но еще не поставлен. Пусть этап файла и зафиксировать его:
$ git add file1
$ git commit -m 'made a change'
[foo 761bed9] made a change
1 files changed, 1 insertions(+), 0 deletions(-)
И запустите git status
:
$ git status
# On branch foo
nothing to commit (working directory clean)
В этот момент файл выглядит следующим образом:
Fri May 11 13:05:59 EDT 2012
Fri May 11 13:07:36 EDT 2012
Если мы вернемся к ветке master
, мы увидим более раннюю версию файла без второй строки:
$ git checkout master
Switched to branch 'master'
$ cat file1
Fri May 11 13:05:59 EDT 2012
Изменения в файле изолированы от ветки, на которой они были зафиксированы.
В обновленном примере это...
$ git checkout master
... не генерирует ошибку, потому что в этот момент версия 'one' в обоих master
и fire
идентична. Изменения в рабочем каталоге одинаково хорошо применимы к любой из версий.