Подтвердить что ты не робот

Как перенести мои текущие изменения в другую ветвь в git

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

Итак, , как я могу сделать, что незафиксированные изменения (или изменения, хранящиеся в индексе), будут переданы в другую ветку, чем текущая?

4b9b3361

Ответ 1

Другие ответы, предлагающие проверить другую ветку, а затем выполнить ее, работают только в том случае, если проверка возможна с учетом локальных изменений. Если нет, вы используете наиболее распространенный прецедент для git stash:

git stash
git checkout other-branch
git stash pop

Первый stash скрывает ваши изменения (в основном, делает временную фиксацию), а последующий stash pop повторно применяет их. Это позволяет git использовать возможности слияния.

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

С другой стороны, если вы действительно перепутались, и в вашем дереве работ есть сочетание изменений для двух ветвей, а конфликты - только те, которые вы хотите зафиксировать на исходной ветке, вы можете сохранить некоторые работы. Как обычно, есть много способов сделать это. Здесь один, начиная с того момента, когда вы попнете и увидите конфликты:

# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset
# Add the things you *do* want to commit here
git add -p     # or maybe git add -i
git commit
# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop
# Add the changes meant for this branch
git add -p 
git commit
# And throw away the rest
git reset --hard

В качестве альтернативы, если вы осознаете, что это произойдет, просто передайте вещи, принадлежащие текущей ветке. Вы всегда можете вернуться и исправить это сообщение:

git add -p
git commit
git stash
git checkout other-branch
git stash pop

И, конечно же, помните, что все это заняло немного времени, и в следующий раз избегайте его, возможно, поместив ваше текущее имя ветки в приглашение, добавив $(__git_ps1) к вашему PS1 в вашем bashrc. (См. Например Git в Bash.

Ответ 2

Вы можете просто создать новую ветку и переключиться на нее. Выполните следующие изменения:

git branch dirty
git checkout dirty
// And your commit follows ...

В качестве альтернативы вы также можете проверить существующую ветку (просто git checkout <name>). Но только, если нет коллизий (база всех отредактированных файлов такая же, как в вашей текущей ветке). В противном случае вы получите сообщение.

Ответ 3

  • git checkout my_other_branch
  • git add my_file my_other_file
  • git commit -m

И сообщите свое сообщение о фиксации.