обновление1:
прямо сейчас я сталкиваюсь с конфликтами, когда я делаю перебазирование. после того, как я изменю код. Не могли бы вы сообщить мне, какую команду выполнить, чтобы устранить конфликты. Предоставление статуса ниже
sports/code/file (branchB)
$ git pull --rebase origin branchA
From https://gitlab.sports.com
* branch branchA -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: wip html fixes
Using index info to reconstruct a base tree...
M sports/ajax.js
Falling back to patching base and 3-way merge...
Auto-merging sports/ajax.js
CONFLICT (content): Merge conflict in sports/ajax.js
error: Failed to merge in the changes.
Patch failed at 0001 wip html fixes
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
sports/code/file (branchB|REBASE 1/2)
$ git status
rebase in progress; onto 89898989892323
You are currently rebasing branch 'branchB' on '89898989892323'.
(fix conflicts and then run "git rebase --continue")
(use "git rebase --skip" to skip this patch)
(use "git rebase --abort" to check out the original branch)
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)
both modified: sports/ajax.js
no changes added to commit (use "git add" and/or "git commit -a")
git pull --rebase origin A
git push -f origin B
, мой код попадет только в ветку B или он также попадет в ветку A.$ git status
On branch B
Your branch and 'origin/B' have diverged,
and have 7 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean
Используйте инструмент пользовательского интерфейса git, который поможет вам лучше, я использую идею Intellij, в которой есть вкладка VCS.
From the branch A I created a new local branch B.
a--a--a (A)
\
b (B, origin/B, meaning this is the initial commit pushed to the remote repo)
Now, if I do
git push -f origin B
, will my code go into branchB
alone or will it go into branchA
also.
Только ветвь B, но эта ветвь B будет включать коммит ветки A.
Это потому, что когда вы это сделали:
git checkout B
git pull --rebase origin A
Вы ушли из
a--a--a--a--a--a (A)
\
b--B--B--B--B--B (local work B)
^
(origin/B)
К:
(A)
v
a--a--a--a--a--a--b'--B'--B'--B'--B'--B' (new rebased B work, on top of A)
\
b
(still origin/B)
Вот почему вы видите:
Your branch and 'origin/B' have diverged, and have 7 and 1 different commits each, respectively.
В вашем случае, если git status
показывает, что вы работаете с B, вы можете сделать
git push --force
Затем вы получите:
a--a--a--a--a--a--b'--B'--B'--B'--B'--B' (B, origin/B)
Ваша ветвь B теперь включает коммиты из A, но ветвь A остается неизменной.
эй у меня есть еще один вопрос, вместо git push -f origin
почему вы делаете git push --force
, в моей команде, почему они упоминают происхождение. Я думал, что происхождение означает начальную ветвь, и она получит ветвь A :(
@zizi «происхождение» не означает «начальная ветвь»: это означает только куда для отправки (URL-адрес удаленного репо). Он используется по умолчанию, поэтому git push --force
совпадает с git push -f origin
.
@zizi Если вы извлекли ветку B перед принудительной отправкой, какие означает, что отправка будет только ветвью B из-за политики отправки по умолчанию (stackoverflow.com/a/948397/6309)
эй, я сделал семь разных коммитов в своей ветке B, можно ли объединить все мои коммиты в один, так как я сделал перебазирование, будет ли это проблемой, можете ли вы сказать мне, как этого добиться?
@zizi После перебазирования вы все еще можете объединить свои последние n коммитов: stackoverflow.com/a/5201642/6309
эй, мне нужно выполнить эти две команды git reset --soft HEAD~3 && git commit - m 'combine all
@zizi Да, но только после перебазирования и только в том случае, если последние 3 коммита — это тот, который вы хотите объединить в один.
спасибо, не могли бы вы помочь мне и с этим stackoverflow.com/questions/56226829/…
@zizi Конечно, я опубликовал свой ответ.
эй, после выполнения этих команд git reset --soft HEAD~3 && git commit - m 'combine all
можно ли объединить код из ветки B в ветку A с помощью команд git
@zizi Да, с git checkout A
и git merge B
@zizi В код сливаться из ветки A в ветку B? Для этого и создан git merge
. У вас есть какие-либо проблемы с этим?
@zizi Это было бы по-другому и повторяло бы коммиты из A поверх B: atlassian.com/git/tutorials/merging-vs-rebasing В вашем случае это не рекомендуется.
эй, теперь я сталкиваюсь с конфликтами, не могли бы вы помочь мне в устранении конфликтов :(
@zizi Не могли бы вы сделать этот новый обновленный случай отдельным новым вопросом? Мой ответ был в контексте вашего первоначального вопроса.
здравствуйте, вы можете мне помочь stackoverflow.com/questions/56297314/…
@dota2pro эй, не могли бы вы сказать мне, в какую ветку это будет отправлено?