You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Учтите, что снимок, на который ссылается ваш последний коммит -- является ли он последним коммитом после перебазирования или коммитом слияния после слияния -- в обоих случаях это один и тот же снимок, отличаются только истории коммитов.
61
61
Перебазирование повторяет изменения из одной ветки поверх другой в том порядке, в котором эти изменения были сделаны, в то время как слияние берёт две конечные точки и сливает их вместе.
62
62
63
-
==== Более интересные перемещения
63
+
==== Более интересные перебазирования
64
64
65
65
Также возможно сделать так, чтобы при перебазировании воспроизведение коммитов применялось к совершенно другой ветке.
66
66
Для примера возьмём <<rrbdiag_e>>.
@@ -83,8 +83,8 @@ $ git rebase --onto master server client
83
83
В этой команде говорится: «Переключись на ветку `client`, найди изменения относительно ветки `server` и примени их для ветки `master`».
84
84
Несмотря на некоторую сложность этого способа, результат впечатляет.
85
85
86
-
.Перемещение тематической ветки, ответвлённой от другой тематической ветки
87
-
image::images/interesting-rebase-2.png["Перемещение тематической ветки, ответвлённой от другой тематической ветки"]
86
+
.Перебазирование тематической ветки, ответвлённой от другой тематической ветки
87
+
image::images/interesting-rebase-2.png["Перебазирование тематической ветки, ответвлённой от другой тематической ветки"]
88
88
89
89
Теперь вы можете выполнить перемотку (fast-forward) для ветки `master` (см <<rrbdiag_g>>):
90
90
@@ -133,21 +133,21 @@ $ git branch -d server
133
133
image::images/interesting-rebase-5.png["Окончательная история коммитов"]
134
134
135
135
[[r_rebase_peril]]
136
-
==== Опасности перемещения
136
+
==== Опасности перебазирования
137
137
138
138
(((перебазирование, опасности)))
139
139
Но даже перебазирование, при всех своих достоинствах, не лишено недостатков, которые можно выразить одной строчкой:
140
140
141
-
**Не перемещайте коммиты, уже отправленные в публичный репозиторий**
141
+
**Не перебазируйте коммиты, уже отправленные в публичный репозиторий**
142
142
143
143
Если вы будете придерживаться этого правила, всё будет хорошо.
144
144
Если не будете, люди возненавидят вас, а ваши друзья и семья будут вас презирать.
145
145
146
-
Когда вы что-то перемещаете, вы отменяете существующие коммиты и создаёте новые, похожие на старые, но являющиеся другими.
146
+
Когда вы что-то перебазируете, вы отменяете существующие коммиты и создаёте новые, похожие на старые, но являющиеся другими.
147
147
Если вы куда-нибудь отправляете свои коммиты и другие люди забирают их себе и в дальнейшем основывают на них свою работу, а затем вы переделываете эти коммиты командой `git rebase` и выкладываете их снова, то ваши коллеги будут вынуждены заново выполнять слияние для своих наработок.
148
148
В итоге, когда вы в очередной раз попытаетесь включить их работу в свою, вы получите путаницу.
149
149
150
-
Давайте рассмотрим пример того, как перемещение публично доступных наработок может вызвать проблемы.
150
+
Давайте рассмотрим пример того, как перебазирование публично доступных наработок может вызвать проблемы.
151
151
Предположим, вы клонировали репозиторий с сервера и сделали какую-то работу.
152
152
И ваша история коммитов выглядит так:
153
153
@@ -179,7 +179,7 @@ image::images/perils-of-rebasing-4.png["Вы снова выполняете с
179
179
Логично предположить, что разработчик не хочет, чтобы `C4` и `C6` были в истории, и именно поэтому она перебазируется в первую очередь.
180
180
181
181
[[r_rebase_rebase]]
182
-
==== Меняя базу, меняй основание
182
+
==== При перебазировании, перебазируйте
183
183
184
184
Если вы попали в такую ситуацию, у Git есть особая магия чтобы вам помочь.
185
185
Если кто-то в вашей команде форсирует отправку изменений на сервер, переписывающих работу, на которых базировалась ваша работа, то ваша задача будет состоять в определении того, что именно было ваше, а что было переписано ими.
@@ -199,8 +199,8 @@ image::images/perils-of-rebasing-4.png["Вы снова выполняете с
199
199
Таким образом, вместо результата, который мы можем наблюдать на <<r_merge_rebase_work>>, у нас получилось бы что-то вроде <<r_rebase_rebase_work>>.
200
200
201
201
[[r_rebase_rebase_work]]
202
-
.Перемещение в начало force-pushed перемещённой работы
203
-
image::images/perils-of-rebasing-5.png["Перемещение в начало force-pushed перемещённой работы"]
202
+
.Перебазирование в начало force-pushed перебазированной работы
203
+
image::images/perils-of-rebasing-5.png["Перебазирование в начало force-pushed перебазированной работы"]
204
204
205
205
Это возможно, если `C4` и `C4'` фактически являются одним и тем же патчем, который был сделан вашим коллегой.
206
206
В противном случае `rebase` не сможет определить дубликат и создаст ещё один патч, подобный `C4` (который с большой вероятностью не удастся применить чисто, поскольку в нём уже присутствуют некоторые изменения).
@@ -211,14 +211,14 @@ image::images/perils-of-rebasing-5.png["Перемещение в начало f
211
211
Если вы используете `git pull` и хотите использовать `--rebase` по умолчанию, вы можете установить соответствующее значение конфигурации `pull.rebase` с помощью команды `git config --global pull.rebase true`.
212
212
213
213
Если вы рассматриваете перебазирование как способ наведения порядка и работаете с коммитами локально до их отправки или ваши коммиты никогда не будут доступны публично -- у вас всё будет хорошо.
214
-
Однако, если вы перемещаете коммиты, отправленные в публичный репозиторий, и есть вероятность, что работа некоторых людей основывается на этих коммитах, то ваши действия могут вызвать существенные проблемы, а вы -- вызвать презрение вашей команды.
214
+
Однако, если вы перебазируете коммиты, отправленные в публичный репозиторий, и есть вероятность, что работа некоторых людей основывается на этих коммитах, то ваши действия могут вызвать существенные проблемы, а вы -- вызвать презрение вашей команды.
215
215
216
216
Если в какой-то момент вы или ваш коллега находите необходимость в этом, убедитесь, что все знают, как применять команду `git pull --rebase` для минимизации последствий от подобных действий.
217
217
218
-
==== Перемещение vs. Слияние
218
+
==== Перебазирование в сравнении со слиянием
219
219
220
220
(((перебазирование, против слияния)))(((слияние, против перебазирования)))
221
-
Теперь, когда вы увидели перемещение и слияние в действии, вы можете задаться вопросом, что из них лучше.
221
+
Теперь, когда вы увидели перебазирование и слияние в действии, вы можете задаться вопросом, что из них лучше.
222
222
Прежде чем ответить на этот вопрос, давайте вернёмся немного назад и поговорим о том, что означает история.
223
223
224
224
Одна из точек зрения заключается в том, что история коммитов в вашем репозитории -- это *запись того, что на самом деле произошло*.
Copy file name to clipboardExpand all lines: book/09-git-and-other-scms/sections/client-svn.asc
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -233,7 +233,7 @@ ones (if any) seem to be successfully integrated into the working tree.
233
233
Please see the above messages for details.
234
234
----
235
235
236
-
Чтобы решить эту проблему запустите `git svn rebase`, которая заберёт все ревизии с сервера, которых у вас пока нет, и переместит (rebase) ваши локальные наработки на них:
236
+
Чтобы решить эту проблему запустите `git svn rebase`, которая заберёт все ревизии с сервера, которых у вас пока нет, и перебазирует (rebase) ваши локальные наработки на них:
0 commit comments