Понимание git-ветвления и промежуточных файлов - PullRequest
0 голосов
/ 24 марта 2011

Я немного озадачен преимуществами ветвления в git.

Если я создаю ветвь, скажем, b1, и переключаюсь на эту ветку, любые изменения, которые я делаю, становятся видимыми, если я снова переключаюсь на главную ветвь.

Выполнение состояния git в основной ветке показывает изменения по сравнению с веткой b1.

Я понимаю, что сначала необходимо внести изменения в b1, но как можно управлять несколькими ветвями без случайной фиксации изменения из другой ветки?

Ответы [ 2 ]

1 голос
/ 24 марта 2011

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

Однако вы правы в том, что очень легко зафиксировать изменения в неправильной ветке. К счастью, ветви git очень легкие - они просто указатель на конец ветви в графе коммитов - и у git есть хорошие инструменты для переписывания истории, чтобы она выглядела так, как вам хотелось бы. Что именно вам нужно сделать, зависит от последовательности того, что вы сделали, но есть много вопросов по переполнению стека, которые касаются этого. (Или вы можете просто спросить новый, если неясно.) Вот простой пример:

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

# Check that git status is clean and you really are on the master branch:
git status

# Create a branch based on your current position:
git branch controversial

# Move master back to the last non-controversial commit, making
# sure that the working tree and index match:
git reset --hard <NON-CONTROVERSIAL-COMMIT>

Если в вашей существующей ветке уже было много коммитов b1, вы можете выбрать их из master:

# Switch back to `b1`:
git checkout b1

# Cherry-pick the commits that you'd rather were on b1:
git cherry-pick <CONTROVERSIAL-COMMIT-A>
git cherry-pick <CONTROVERSIAL-COMMIT-B>

# Switch back to `master`:
git checkout master

# Reset master back to the last non-controversial commit, making
# sure that the working tree and index match:
git reset --hard <NON-CONTROVERSIAL-COMMIT>

... из, если у вас есть лоты коммитов на мастере, которые должны быть на b1, вы можете использовать git rebase.

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

0 голосов
/ 25 марта 2011

Если вы используете git из командной строки, неплохо написать текущую ветку в приглашении bash, например,

http://railstips.org/blog/archives/2009/02/02/bedazzle-your-bash-prompt-with-git-info/

Таким образом, вам не нужно постоянно вводить "git branch", чтобы узнать, в какую ветку вы сейчас переходите.

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