2009-08-18 4 views
2

Я озадачен тем, как использовать ветви в git для сохранения временной работы.git save snapshots with branches

Это то, что я пробовал:

/tmp/gt > git init 
Initialized empty Git repository in .git/ 
/tmp/gt > date > t 
/tmp/gt > git add t 
/tmp/gt > git commit -m 'initial' 
Created initial commit b722fde: initial 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 t 

Теперь я экономлю далеко, что работа расшириться «Ъ».

/tmp/gt > git branch b 

и продолжить работу в главной ветке.

/tmp/gt > date >> t 
/tmp/gt > cat t 
Di 18 Aug 2009 08:52:43 CEST 
Di 18 Aug 2009 08:53:13 CEST 

Что меня удивляет это:

/tmp/gt > git checkout b 
M  t 
Switched to branch "b" 
/tmp/gt > cat t 
Di 18 Aug 2009 08:52:43 CEST 
Di 18 Aug 2009 08:53:13 CEST 

Я ожидал, что в филиале «Ъ» файл «Т» был еще в том же состоянии, когда была создана ветвь (т.е. с указанной просто единственная строка даты).

Могу ли я избежать этого автоматического слияния или это какой-то концептуальный вопрос?

Благодарим за руководство, Axel.

ответ

4

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

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

Причина, по которой это поведение заключается в поддержке очень распространенного рабочего процесса: начать взлом, понять, что хаки должны быть на альтернативной (или новой) ветке, (создавать и) проверять ветвь, продолжать хакинг.

3

Это намеренно: все ваши текущие изменения в вашей рабочей копии будут объединены. если сделать еще одну фиксацию на хозяине, а затем проверить b, у вас будет файл oneliner.

другое решения является git checkout -f b, но это будет перезаписывать ваши изменения, которые вы-как правило, не хотите

0
git reset --hard 

восстановят состояние, как Git хранит его, так что если вы называете это после того, как ваши «git checkout b "Линия t будет восстановлена ​​в своем первозданном состоянии.

+0

Но если я снова вернусь к ветке «хозяин», то модификация будет потеряна. Я предполагаю, что я всегда должен знать об этом и делать фиксацию перед проверкой ветки. – axelrose