2013-10-26 5 views
11

Я с нетерпением ходил в режим кода и модифицировал некоторые файлы, но сначала пренебрегал ветвью от мастера. Моды не настолько обширны, что я не могу их переделать, но что хорошего в том, чтобы перенести мои (пока что незавершенные) изменения в мастер и перенести их в новую ветку, оставив в конечном итоге мастер нетронутым?Забыл на ветку в git, нужно переместить изменения с мастера

+1

[ ** Dude. **] (https://www.google.com/search?q=Forgot+to+branch+in+git%2C+need+to+move+changes+from+master). Этот вопрос, похоже, не соответствует теме, потому что googling название дает отличные ответы. – jthill

+0

@ krmlr-- спасибо – larryq

ответ

19

Если еще не совершено в любом месте (git status показывает кучу вещей модифицированную, это нормально, если это "мерзавец добавить" - ed):

$ git checkout -b newbranch 

Несмотря на название checkout это использование (с -b) ничего не проверяет. Флаг -b говорит: «Создайте новую ветку», поэтому git создает имя ветки и соответствует текущему HEAD фиксации. Затем он делает HEAD указывает на новую ветку и останавливается там.

Ваша следующая фиксация, следовательно, находится на newbranch, который имеет как родительский фиксатор, фиксацию, на которой вы были, когда вы начали изменять файлы. Так если вы были на master, и вы должны были эти коммиты:

A - B - C  <-- HEAD=master 

checkout -b делает это читать:

A - B - C  <-- master, HEAD=newbranch 

и позже совершить добавляет новое обязательство D:

A - B - C  <-- master 
      \ 
      D <-- newbranch 
2
git stash 
git stash branch <branchname> 
+0

Это будет работать, но 'git checkout -b ' проще (и немного быстрее, он не должен отменять изменения, а затем повторно применять их). – torek

2
git branch -M master my-branch 

, а затем

git fetch origin refs/heads/master:refs/heads/master 

или

git branch master my-branch (or another ref) 
+0

Это хороший способ изменить материал, который был * зафиксирован *, на новой ветке 'my-branch'. – torek

Смежные вопросы