2016-06-07 3 views
0

Это общий вопрос о нобе, и я понял, что люди задавали подобные вопросы, но я не знаю, что делать. Я работаю над проектом и хочу попробовать что-то сделать. Это не работает, и теперь я хочу вернуться.git Branch Without Commit - Отменить изменения

В момент, когда я начал свой эксперимент, я сделал это:

мерзавец филиал эксперимент
мерзавец контроль эксперимент

Тогда я сделал кучу вещей. А потом я попытался вернуться с этим:

мерзавец контроль разработки

Но все мои экспериментальные изменения все еще там. Я могу вернуться к более ранним сделкам, но это теряет много работы.

Что я понял, так это то, что я должен был совершить свои изменения до того, как я разветвлюсь. Итак, тогда я ткнул в SourceTree, чтобы попытаться понять, в каком состоянии находится мой проект. Но теперь у меня настоящие проблемы. Согласно SourceTree, последняя фиксация была 12 часов назад. Незафиксированные изменения показывают только две очень незначительные модификации, которые я сделал около 8 часов назад. Кажется, я потерял последние 8 часов своей работы. То же самое происходит на обеих ветвях.

Я сейчас вкрутил? Есть ли способ, чтобы я мог вернуться к тому, в каком я разветвлен? Спасибо.

+0

Вы также проверили ветку эксперимента? –

+0

Да. Оба они показывают одинаковый статус. – Alex

+0

Я прочитал статью git: _ноте, что если ваш рабочий каталог или промежуточная область имеет незафиксированные изменения, которые конфликтуют с веткой, которую вы проверяете, Git не позволит вам переключаться между ветвями. Лучше иметь чистое рабочее состояние при переключении ветвей. Есть способы обойти это (а именно, скопировать и внести поправки), которые мы рассмотрим позже, в Stashing and Cleaning_ –

ответ

0

Да, вы ввернуты, но хорошо, что вы узнаете из этой ошибки. Когда вы работаете с Git: commit часто и stash при переключении контекста.

В вашем примере вы внесли некоторые изменения, например, вы изменили foo и создали bar. Вы можете видеть изменения до начала эксперимента:

$ git status 
On branch master 
Changes to be committed: 
     new file: bar  
Changes not staged for commit: 
     modified: foo 

На данный момент, если вы создаете новый branch и перейти на него, ничего не будет мне изменены ни на вас working directory или ваш index с новой ветвью experiment точек на очень же совершить как master master делаем.

$ git checkout -b experiment 
A  bar 
M  foo 
Switched to a new branch 'experiment' 

$ git status 
On branch experiment 
Changes to be committed: 
     new file: bar  
Changes not staged for commit: 
     modified: foo 

Итак, если вы вносите изменения, вы потеряете свою предыдущую работу. Тем не менее, это не совсем так, потому что bar находится на индексе (зеленый цвет при выполнении git status). Если изменить bar ваше уведомление об изменении в рабочем каталоге, но предыдущая версия остается на индексе:

$ echo "bar" >> bar 
$ git status 
On branch experiment 
Changes to be committed: 
     new file: bar 
Changes not staged for commit: 
     modified: bar 
     modified: foo 

двух лучших решений для отслеживания ваших изменений:

  1. Commit часто на фиктивные ветви.
  2. Используйте git stash для переключения между контекстами.

В вашем случае, если вы совершили бы изменения на фиктивную ветви перед началом эксперимента:

$ git checkout -b previous_changes 
$ git commit -am "Something I want to keep" 
$ git checkout -b experiment [email protected]{1} 
do some changes... 
0

То, что я понял, что я должен совершил свои изменения, прежде чем я разветвленный.

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

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

Изменения, которые никогда не добавляются в репозиторий, не принадлежат к репозиторию, и Git не знает о них. К сожалению, если вы не можете восстановить их из фактически зафиксированных изменений, которые вы сделали в своей новой ветке, они потеряны.

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