Как вы создаете локальные филиалы, не получая незафиксированных изменений других локальных филиалов? - PullRequest
0 голосов
/ 03 апреля 2012

В настоящее время я работаю над несколькими изменениями / ошибками, и я хотел бы иметь возможность работать с ними индивидуально, используя отдельные локальные ветви.Но когда я нахожусь в процессе работы над чем-то, например, branch_a, а затем мне нужно начать работу над новым горячим проектом, и я создаю branch_b, у меня все еще есть изменения, которые я сделал с branch_a,

Вот рабочий процесс:

  1. Создано и извлечено локально branch_a из dev филиал
  2. Внесены локальные изменения в branch_a (но нетпостановка с помощью git add или локальная фиксация)
  3. Необходим для запуска с новой горячей ошибкой, поэтому переключен на ветку dev, создан и извлечен branch_b
  4. Выполнить git status и я вижу изменения, которые я сделал на branch_a

Как мне создать новую ветку, в которой нет изменений, которые я сделал на branch_a?

Кроме того,когда я проверяю другую ветку, я получаю

$ git checkout branch_b
M   app/controllers/stuff.rb
M   app/views/stuff/index.html.erb
Switched to branch 'branch_b'

Что означает M?

Спасибо

Ответы [ 4 ]

2 голосов
/ 03 апреля 2012

М означает модифицированный. Сначала вы должны зафиксировать свои изменения в вашей текущей ветке или спрятать их.

Когда вы хотите спрятать их:

git add .
# temporary stash your changes
git stash
# create a new branch
git checkout -b branch_b
# do your changes
git commit -am 'fixed but in branch_b'
# go back to branch a
git checkout branch_a
# get back your stash
git stash pop

Когда вы решите зафиксировать свои изменения:

git add .
git commit -am 'changes in branch_a'
# creating and checkout new branch
git checkout -b branch_b
# fix your bug
git add .
git commit -am 'just fixed a bug'
1 голос
/ 03 апреля 2012

M изменено. Вы изменили этот файл, и он не обработан. Вы можете либо добавить изменения, а затем зафиксировать их в процессе работы в branch_a перед переключением на новую ветвь, либо используйте git stash, чтобы сохранить изменения перед заменой.

0 голосов
/ 03 апреля 2012

M означает, что файл был изменен.Чтобы сделать то, что вы хотите, я обычно использую два подхода.

Один из подходов - использование stash, вызовите git stash, прежде чем покинуть текущую ветку, и все ваши изменения будут помещены во «вторичный индекс».своего рода называется тайником.Когда вы вернетесь к своей первоначальной ветке, просто позвоните git stash pop, чтобы вернуть изменения из хранилища.

Другой подход, который я также использую довольно часто, если я ожидаю, что мой новый набор изменений будет довольно долгимжил, это просто сделать "wip" коммит, который я позже отменил:

(oldbranch)$ git add -A . && git commit -m"wip"
(oldbranch)$ git checkout master && git checkout -b newbranch
# work on the new branch....
(newbranch)$ git checkout oldbranch
(newbranch)$ git reset HEAD^

git reset HEAD^ превращает ваш рабочий каталог в коммит ДО текущего заголовка ветви и перемещает все изменениякоторые были частью этого «wip» коммита обратно в ваш рабочий каталог, эффективно возвращая вас туда, где вы были.

0 голосов
/ 03 апреля 2012

Вам нужно где-то сохранить свои несвязанные изменения.То есть, если вы не хотите просто избавиться от них, но вы, вероятно, не хотите этого делать.

Лучшее решение здесь почти наверняка git stash.Это позволяет вам «спрятать» ваши несвязанные изменения, чтобы вы могли работать со свежей рабочей копией, а затем вы можете повторно применить ваш тайник позже.

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