2009-06-03 3 views
9

Мы используем центральный репозиторий 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 особенно раздражают, так как наш репозиторий довольно большой, поэтому они занимают некоторое время.

ответ

13

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

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

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 
1

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

мерзавец тянуть --rebase хозяину

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

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

0

I обычноy делаю.

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

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

6

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

# 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 
+0

Что вы подразумеваете под «предполагая, что это удаленная ветка отслеживания»? mybranch - это локальная ветвь, существующая только в моем собственном репозитории. Будет ли ваше решение работать и при этих обстоятельствах? – siebert

+0

«Удаленная ветка отслеживания» на самом деле является только локальной ветвью, за исключением того, что git запоминает удаленный репозиторий и ветвь по умолчанию, которые нужно использовать, когда вы выполняете «pull». В противном случае команды «git push» и «git pull» должны были бы предоставить полное местоположение репозитория. Вот пример создания удаленного отслеживания филиал $ GIT филиал feature_x происхождения/мастер или $ мерзавец контроль -b feature_x происхождения/мастер Если вы опустите пульт дистанционного SPEC («происхождения/мастер» в этом case), то feature_x не является ветвью удаленного отслеживания. –

Смежные вопросы