Как эффективно перебазировать и протолкнуть локальную ветку git?

Мы используем центральный репозиторий git, который я клонировал, и я работаю над локальной веткой.

Когда я хочу сделать свои изменения доступными в центральном репозитории, я должен выполнить следующие команды (начиная с mybranch):

#Stash local changes not yet ready for checkin
git stash

#Make sure we have all changes from the central repository
git checkout master
git pull

#Rebase local changes
git checkout mybranch
git rebase

#Push changes
git checkout master
git merge mybranch
git push

#Back to my branch and continue work
git checkout mybranch
git stash apply

Я хотел бы знать, возможно ли использовать меньше команд git для достижения той же цели. Несколько переключателей между master а также mybranch особенно раздражают, так как наш репозиторий довольно большой, поэтому он занимает некоторое время.

4 ответа

Решение

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

Это более минимальный рабочий процесс.

git fetch

# ensure that everything is committed
# perhaps git commit -a is required...

git rebase origin/master


# If you don't want to push the very latest commits you might
# want to checkout a parent or ancestor of the current commit
# to test that the proposed commit passes tests, etc.
# e.g. git checkout HEAD~n

# push to the remote master
git push origin HEAD:master

# if you checked out a parent, go back to the original branch
git checkout mybranch

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

git push origin HEAD^:master

Нет необходимости тянуть как ветки master, так и ветви mybranch. Поскольку вы являетесь таким хорошим гражданином и делаете быстрые обновления, это довольно просто:

# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git checkout master
git merge mybranch
git push

Конечно, вы также можете нажать из своей ветки MyBranch

# Save local mods not ready for commit
git stash
# Do the pull & rebase local work assuming this is a remote tracking branch
git pull --rebase
git push origin mybranch:master

Вы можете объединить тянуть и перебазировать в одно:

git pull --rebase master

Но в целом, да, исходя из моего опыта, он включает в себя все эти команды.

Чтобы сохранить ваш репозиторий в чистоте, полезно часто запускать "git gc", который удалит неиспользуемые объекты. Это должно сократить время переключения веток.

Я обычно делаю.

git co master
git pull
git rebase master mywrk # fix conflicts if any
git rebase mywrk master
git push

Вы можете определить псевдонимы, чтобы сохранить ввод, если вам это нравится.

Другие вопросы по тегам