Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
git rebase ...
противопоказан.--diff-algorithm={patience|minimal|histogram|myers}
Choose a diff algorithm. The variants are as follows:
default, myers
The basic greedy diff algorithm. Currently, this is the default.
minimal
Spend extra time to make sure the smallest possible diff is produced.
patience
Use "patience diff" algorithm when generating patches.
histogram
This algorithm extends the patience algorithm to "support low-occurrence common elements".
--word-diff
и прочие.git init
touch test.txt
echo -e "2\n+\n2\n=\n4" > test.txt
git add test.txt
git commit -m "2+2=4"
git checkout -b my
echo -e "2\n+\n3\n=\n5" > test.txt
git add test.txt
git commit -m "2+3=5"
git checkout master
echo -e "2\n*\n2\n=\n4" > test.txt
git add test.txt
git commit -m "2*2=4"
git checkout my
git rebase master
git rebase cae31030
, — так это потому, что в репозитории я rebase уже делал, и мастера уже нет; если повторять с нуля, то будет git rebase master
.В Hg логики тоже не нашёл, этим он не легче.
git branch -a
git tag
git branch name
git tag -a name
hg branch name
hg tag name
hg branches
hg tags
Чушь, всегда переключался по имени ветки.
push да, а при pull какая разница? Легко решается алиасами.
Если вы говорите, что нет почти никому не нужной штуки с несоответсвующим именем, то так и говорите, потому что в русском языке «именованная ветка» — ветка, которая имеет имя, и в гите ветки имена-таки имеют. (P.S. Ссылка нерабочая)
Гугл подсказывает, что можно даже проще, всего лишь настроить конфиг:
git config --global push.default current
если бы это было действительно так, с чего бы класть этот плагин в коробку?
б) если бы это было действительно так, с чего бы класть этот плагин в коробку?
hg rebase
, не включив его, то получитеhg: неизвестная команда 'rebase'
'rebase' предоставляется следующим расширением:
rebase команда для перемещения наборов ревизий к другому предку
наберите "hg help extensions" для справки по включению расширений
..hg/strip-backup
, с — просто оставляет их в репозитории (никакого автоматического gc!). Git же оставляет эти резервные копии на милость своего gc.git rebase master
. Тут rebase проходит автоматически, конфликта НЕ возникает, в коде появляется ошибка, как описал автор.git init
touch test.txt
echo -e "сумма\n2\n+\n2\n=\n4" > test.txt
git add test.txt
git commit -m "2+2=4"
git checkout -b my
echo -e "сумма\n2\n+\n3\n=\n5" > test.txt
git add test.txt
git commit -m "2+3=5"
git checkout master
echo -e "произведение\n2\n*\n2\n=\n4" > test.txt
git add test.txt
git commit -m "2*2=4"
git checkout my
git rebase master
git init
touch test.txt
echo -e "сумма\n2\nи\n2\n=\n4" > test.txt
git add test.txt
git commit -m "2+2=4"
git checkout -b my
echo -e "сумма\n2\nи\n3\n=\n5" > test.txt
git add test.txt
git commit -m "2+3=5"
git checkout master
echo -e "произведение\n2\nи\n2\n=\n4" > test.txt
git add test.txt
git commit -m "2*2=4"
git checkout my
git rebase master
С Mercurial вы действительно можете узнать, какой ветке принадлежало изменение. А можете и не узнать, если вместо веток использовались закладки (с некоторыми оговорками — то же, что и ветки в Git). Или отдельные каталоги вместо веток.
При использовании модели git flow при отсутствии отклонений от неё особых проблем с определением ветки не возникает.
Например, при задаче: в репозиторий Foo сделать cherry-pick всех коммитов ветки feature из репозитория Bar. В git нужно будет отобрать нужные последовательности коммитов, и для каждой сделать cherry-pick. А в Mercurial?И в git, и в mercurial можно скормить команде cherry-pick (git) или transplant (mercurial, находится в одном из стандартных расширений) диапазон. В mercurial вместо диапазона можно написать что‐нибудь посложнее.
hg transplant -b {branch name}
или hg rebase --keep --source {branch name}
пересадит ветку. То же самое может сделать hg transplant 'branch(branch name)'
, но я не знаю, как всё это работает с уже применёнными изменениями. hg transplant
отказывается пересаживать родителя текущего изменения, git cherry-pick
не смущается, даже если его попросить пересадить HEAD. hg rebase -r {revisions}
, кстати, тоже работает, только отказывается если ревизии не связаны.hg transplant 'branch(foo) and file(bar)'
.git init echo -e "2\n+\n2\n=\n4" > test.txt git add test.txt git commit -m "2+2=4" git checkout -b my echo -e "2\n+\n3\n=\n5" > test.txt git add test.txt git commit -m "2+3=5" git checkout master echo -e "2\n*\n2\n=\n4" > test.txt git add test.txt git commit -m "2*2=4" git checkout my git rebase master
git init echo -e "+\n2\n2\n=\n4" > test.txt git add test.txt git commit -m "2+2=4" git checkout -b my echo -e "+\n2\n3\n=\n5" > test.txt git add test.txt git commit -m "2+3=5" git checkout master echo -e "*\n2\n2\n=\n4" > test.txt git add test.txt git commit -m "2*2=4" git checkout my git rebase master
git pull --rebase origin master
. Глобальное тестирование, понятное дело, работает поверх основной ветки. Разработчики могут в ручном режиме говорить интеграционным тестам прогнать их конкретную публичную (если проект закрытый, то в рамках компании) ветку.
Чем опасен rebase, или как получилось, что 2*3=5