Ваш вопрос на самом деле часто встречается в git - внесение локализованных изменений с использованием git.
Когда вы используете git pull
, вы получаете различие только между локальным образом git и удаленным сервером git.всякий раз, когда вы вносите локальные изменения, вы можете ввести git diff
, чтобы увидеть различия.Таким образом, для вас ваши шаги должны быть:
git diff > mydiff.patch
, чтобы получить разницу патча с изменениями, которые вы сделали. git checkout -f
, чтобы вернуться к исходному изображению до того, как вылокализованные изменения. git pull
для полного обновления git с удаленного сервера.это то, где repo sync
также может войти - например, repo sync
перейти к последовательности команд git (просмотр через ps -ef
) , затем вы снова примените свои локализованные изменения черезpatch -p1 --dry-run < mydiff.patch
для проверки повторного применения.В случае успеха сделайте реальное исправление с помощью:
patch -p1 < mydiff.patch
Если не успешно, это только означает, что ваши изменения вступают в конфликт с некоторыми изменениями, выполненными на стороне удаленного сервера, которые были зафиксированы другими, и это то, где у вас естьвручную повторить изменения - утомительно, но выбора нет.
Обратите внимание: git
можно применить к каждому каталогу, где вы видите каталог .git
, и только команду gitвступить в силу на этом уровне каталога.Если вы сделали несколько изменений в разных каталогах с подкаталогом .git
, то вы должны сделать git diff
и git checkout -f
для каждого из этих каталогов.
Например, при выполнении обновления repo sync
Iполучил:
Fetching projects: 100% (172/172), done.
Syncing work tree: 2% (4/171) error: You have local changes to 'core/base_rules.mk'; cannot switch branches.
Syncing work tree: 3% (6/171) error: You have local changes to 'tools/dx-tests/Android.mk'; cannot switch branches.
Syncing work tree: 100% (171/171), done.
external/dbus/: discarding 43 commits
error: build/: platform/build checkout 0683a77348f2a0a529a8e2bcfdf4b6dc6b4c5f5b
error: cts/: platform/cts checkout a3779fa378345bfd8699e91de46b29563be4beb2
Обходя вниз, я обнаружил, что под каталогом cts
находится .git
, поэтому cd cts
и git diff
дают разницу.
Приведенная выше схемадостаточно прост, так как всегда есть только одна ветвь - основная ветвь, и ваши изменения всегда на вершине этого.
В качестве альтернативы вы должны использовать git branch
, чтобы построить свою собственную ветку, а затем git merge
чтобы объединить вашу ветку с основной веткой по умолчанию (читайте this ).
Команда для объединения будет git merge topic
, где topic
- ветка, созданная с git branch
дляхраните ваши индивидуальные изменения.
В целом операции остаются такими же, как указано выше - конфликты будут возникать, если мастер и ваша ветвь изменяют один и тот же файл в одной строке или ваша модификация приходит ПОСЛЕ мастера.