Подтвердить что ты не робот

Git проверка ничего не меняет

Мне очень нравится git. По крайней мере, мне нравится идея git. Возможность проверить мой мастер-проект как отдельную ветку, где я могу изменить все, что захочу, не рискуя прикрутить все остальное, потрясающе. Но он не работает.

В основном, мой рабочий процесс выглядит следующим образом:

  • Оформить стабильную версию новой ветки для экспериментов с новым кодом
  • Сделайте кучу изменений - у меня нет намерения сохранить что-либо из этого, я просто экспериментирую.
  • Посмотрите на все, что я изменил.
  • Добавить все изменения для отслеживания
  • Зафиксируйте ветвь и нажмите ветвь в начало (если она сработала, в противном случае пропустите этот шаг)
  • Решите попробовать другой метод, вернитесь к мастеру
  • Наблюдайте за артефактами из экспериментальной ветки, в которой я работал, хотя я в ведущей ветке.

Каждый раз, когда я проверяю ветку на другую ветку, вношу изменения в одну ветку, а затем проверяю исходную ветку, у меня все еще есть все файлы и изменения, которые произошли в другой ветке. Это становится очень расстраивающим. Я читал, что это может произойти, когда у вас есть файлы, открытые в среде IDE при этом, но я был очень осторожен в этом, и оба закрыли файлы в среде IDE, закрыли IDE и закрыли мой сервер rails перед переключением ветвей, и это все еще происходит. Кроме того, при запуске 'git clean -f' либо удаляется все, что произошло после некоторого произвольного коммита (и, случайно, при этом), или, как и в последнем случае, ничего не изменило в исходное состояние.

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

git checkout -b photo_tagging
git branch # to make sure it right
# make a bunch of changes, creations, etc
git status # see what changed since before
git add . # approve of the changes, I guess, since if I do git commit after this, it says no changes
git commit -m 'these are changes I made'

git checkout master
git branch #=> *master

# look at files, tags_controller is still there, added in photo_tagging
# and code added in photo_tagging branch are still there in *master

Кажется, это происходит, если я делаю фиксацию или нет в ветке.

4b9b3361

Ответ 1

Вот пример использования git и ветвей.

$ git branch
* master
  organize

$ git branch networking
$ git checkout networking

$ git branch
  master
* networking
  organize

Теперь мастер был обновлен много раз, так как все сделали что-нибудь в сети

$ git pull origin networking
From github.com:dlundquist/Asteroids
 * branch            networking -> FETCH_HEAD
CONFLICT (rename/delete): Rename src/ServerClientThread.java->src/ServerConnectionThread.java in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 and deleted in HEAD
Auto-merging src/Actor.java
Auto-merging src/Asteroids.java
CONFLICT (content): Merge conflict in src/Asteroids.java
Auto-merging src/BasicWeapon.java
CONFLICT (content): Merge conflict in src/BasicWeapon.java
CONFLICT (delete/modify): src/DedicatedServer.java deleted in HEAD and modified in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722. Version 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 of src/DedicatedServer.java left in tree.
Auto-merging src/MainMenu.java
CONFLICT (content): Merge conflict in src/MainMenu.java
CONFLICT (delete/modify): src/NetworkClientThread.java deleted in HEAD and modified in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722. Version 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 of src/NetworkClientThread.java left in tree.
CONFLICT (delete/modify): src/NetworkUpdate.java deleted in HEAD and modified in 92d5b7c4e7c4110803eabf5d5152e7f2a337d722. Version 92d5b7c4e7c4110803eabf5d5152e7f2a337d722 of src/NetworkUpdate.java left in tree.
Auto-merging src/ScenePanel.java
CONFLICT (content): Merge conflict in src/ScenePanel.java
Auto-merging src/Shield.java
CONFLICT (content): Merge conflict in src/Shield.java
Auto-merging src/Sprite.java
Auto-merging src/TripleShotWeapon.java
Auto-merging src/Weapon.java
Automatic merge failed; fix conflicts and then commit the result.
mjolnir:Asteroids Durandal$ git status
# On branch networking
# Changes to be committed:
#
#   modified:   src/Actor.java
#   modified:   src/Sprite.java
#   modified:   src/TripleShotWeapon.java
#   modified:   src/Weapon.java
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      src/Asteroids.java
#   both modified:      src/BasicWeapon.java
#   deleted by us:      src/DedicatedServer.java
#   both modified:      src/MainMenu.java
#   deleted by us:      src/NetworkClientThread.java
#   deleted by us:      src/NetworkUpdate.java
#   both modified:      src/ScenePanel.java
#   added by them:      src/ServerConnectionThread.java
#   both modified:      src/Shield.java

Woah, git действительно сумасшедший. Похоже, что Мастер слишком далеко опережает Networking для git, чтобы выполнить всю работу для меня.

$ git reset --hard networking
HEAD is now at 20d6ee8 done tweaking game on the main branch.  Fixed a few bugs with the TripleShotWeapon.  Rebalanced the gameMechanics() in Asteroids to increase the difficulty as the levels increase.
mjolnir:Asteroids Durandal$ git status
# On branch networking
nothing to commit (working directory clean)

Хорошо, теперь я "вовремя", когда сетевая связь в последнее время продвигается к происхождению. Но я действительно должен вернуться и объединиться с Учителем сейчас, прежде чем я сделаю какую-нибудь работу. Другим мудрым будет сложно слить.

Время слияния файлов

$ git add (insert conflict resolved files here)
$ git commit -a -m "Merged networking with master"
$ git checkout master
$ git branch
* master
  networking
  organize

Теперь применим наши изменения.

$ git merge networking
Already up-to-date.

Возможно, вы захотите сделать это, если вам понравится "Да!"

$ git merge origin networking
Already up-to-date. Yeeah!

Нажмите наши изменения в мире

$ git push origin master

Ответ 2

У меня возникла эта проблема, когда я попытался переключить temp на другую ветку из главной ветки, и когда я что-то изменил на этой временной странице, и, не совершая изменений, я снова проверил бы главную ветку, она фактически объединила все изменения из ветвь TEMP в MASTER.

ОТВЕТ:

Всякий раз, когда вы выходите на ветку TEMP, COMMIT ваши изменения. Таким образом, если вы снова передадите их на ветку TEMP и проверите MASTER, она будет работать как предполагается.

Ответ 3

Мне нравится объяснять git на общем языке. Ответ: из-за предположения, что изменение ветвей (checkout) приведет вас к другому "рабочему пространству". git не делает этого (хотя это кажется более естественным, и у многих это недоразумение).

Вместо этого ветки похожи на теги, так сказать. Таким образом, вы можете танцевать вокруг ветвей, делать какую-то работу, изменять вещи, снова танцевать, а затем совершать. Затем, фиксация будет съедена последней веткой, в которую вы пошли! В кассе меняется только тег/ветвь, который вы будете использовать, период.