* это один из тех, «это хорошая идея?» вопросы, которые я не могу форматировать в SO приемлемый вопрос, но ....создание ветки только для слияния
Я по-прежнему не на 100% удобен с git, особенно слиянием с удаленными ветвями. Если что-то пойдет не так, или я просто хочу отказаться от кучи конфликтов слияния, я, как правило, стараюсь откатить слияния/коммиты. Я обнаружил, что дальше дальше по кроличьей норе. Мне интересно, было бы проще создать ветку только для того, чтобы сделать удаленное слияние, а затем локально слить ветвь temp с моей «реальной» ветвью »? Таким образом, я всегда мог развязать временную ветку, если что-то пошло не так.
UPDATE: Я специально заинтересован в том, когда мой удаленный филиал добавит кучу файлов в моем репо Например (используя пример Питера ниже):.
Я делаю это:
$ git init
Initialized empty Git repository in /path/to/repo/.git/
$ touch README
$ git add README
$ git commit -m 'Initial commit'
[master (root-commit) da9886d] Initial commit
0 files changed
create mode 100644 README
$ touch A
$ git add A
$ git commit -m 'Add A'
[master 3480a5b] Add A
0 files changed
create mode 100644 A
$ git push // pushed to remote (only a single file, A)
Затем другой разработчик делает это:
$ git clone
$ touch B
$ git add B
$ git commit -m 'Add B'
[foo 9912a23] Add B
0 files changed
create mode 100644 B
$ git push // pushed to remote (now has two files A and B)
Если бы я тогда это сделать:
$ git pull
Я буду иметь два файла A и B. Теперь, если я хочу, чтобы «шаг назад» и отменить слияние:
$ git reset --hard [email protected]{...}
Файл B будет по-прежнему существовать на моей машине в качестве незатронутого файла, верно? Как я могу отступить и удалить эти файлы, как если бы я никогда не делал слияние git?
Вот почему я надеялся создать отдельную ветку. Если я создаю отдельную ветку для выполнения слияния:
$ git checkout -b tempBranchForMerge
$ git pull
Я до сих пор в конечном итоге с файлами А и В, но они существуют только на tempBranchForMerge. Если что-то пойдет не так, я должен это сделать:
$ git checkout master
$ git branch -d tempBranchForMerge
правый? Это удалит файл B.
Хорошие примеры. Я добавлю, что если я заранее знаю, что у меня может получиться что-то сложное, я просто пометю, где я сейчас, с помощью git tag safepoint', а затем сделаю все, что захочу. Если все отправится на юг, я могу просто «git reset - hard safepoint». Важно понимать рефлог, если вы этого не сделали, конечно. –
Когда вы вернетесь к мастеру @ {1}, будет ли файл B удаляться или будет существовать, но не отслеживаться? Я предполагаю, что ваше описание также будет работать для слияния с удаленной ветвью. – tir38
Он удалит файл. 'git reset --hard' переместит указатель ветки на данный аргумент и сделает рабочее дерево похожим на то, что было тогда. Существуют и другие варианты, кроме '--hard'. Для более подробного объяснения см. 'Git help reset'. –