2014-01-29 5 views
2

Я часто использую git, но у меня нет очень глубокого понимания деталей под капотом и «git language» ...как отменить git pull или git push?

У меня есть два каталога: один на моем компьютере один на моем ноутбуке. Оба содержат репозиторий .git (который не годится!).

Мой ноутбук подключается через ssh к моему компьютеру, а с ноутбука я нажимаю на компьютер (добавив удаленный ssh).

Потому что я не могу нажать на ветку, которая выписана (на ПК с ноутбука), у меня на компьютере две ветви (мастер и ноутбук-мастер). Так что я толкаю, а затем на ПК я объединять ветви.

В некотором роде я испортил правильный порядок, и у меня конфликты.

Я пытаюсь с git log, git diff (и gitk), чтобы очистить вещи.

Для отмены слияния я использовал

git reset --merge 

Является ли эта команда опасна?

Как я могу оттянуть или нажать от/до пульта?

Нужен ли мне «центральный» репозиторий для избежания конфликтов (я думаю, это означает, что это голый репозиторий)?

Почему нельзя нажать на ветку на удаленном удаленном устройстве? Могу ли я заставить это не опасным образом?

Каждый намек хорошо ... благодаря

ответ

1
  • Это не опасно делать git reset --merge.

  • A git pull можно «отменить», выполнив git reset --hard до .

  • А git push может быть «отменено», делая git reset для фиксации вас на самом деле хотите в вашем репо, а затем заставить его толкать, делая git push -f

  • Центральное хранилище будет более стандартной установки.

Почему это не представляется возможным, чтобы подтолкнуть к ветви на пульте дистанционного управления, который проверил?

Потому что, как правило, было бы сложно ввести изменения в ваш репозиторий путем внесения в него каких-либо внешних репо.

Могу ли я заставить это не опасным способом?

Вы можете настроить мерзавца, чтобы его, выполнив эту команду в этом репо (ваш ПК репо, как я понимаю):

git config receive.denyCurrentBranch warn 

Затем вы можете нажать изменения в извлечённой отрасли. Однако, когда вы переключаетесь на pc repo, у вас будет запутанное состояние, так как эти изменения не будут отражены в рабочем дереве. На самом деле это будет выглядеть так, как будто вы отменили эти изменения (потому что они находятся в репо, но не в рабочем дереве).

Вы можете получить нажатые изменения с помощью git reset --hard, но это избавит вас от любых локальных изменений, которые у вас есть. Если у вас есть локальные изменения, вам придется вручную восстановить каждый файл, который был нажат, используя git reset HEAD <file> и git checkout -- <file>

Вот пример, где я устанавливаю конфигурацию, переключаюсь на ноутбук, вносим изменения, нажимаем это изменение, переключаем к ПК и сбросить этот репозиторий, чтобы получить изменения в рабочем дереве:

C:\git\pc_repo [master]> git config receive.denyCurrentBranch warn 
C:\git\pc_repo [master]> cd .. 
C:\git> cd .\laptop_repo 
C:\git\laptop_repo [master]> echo hello >> text.txt 
C:\git\laptop_repo [master]> git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: text.txt 
# 
no changes added to commit (use "git add" and/or "git commit -a") 
C:\git\laptop_repo [master +0 ~1 -0]> git commit -am "modified text" 
[master 4925c26] modified text 
1 file changed, 2 insertions(+), 1 deletion(-) 
C:\git\laptop_repo [master]> git push 
Counting objects: 5, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (2/2), done. 
Writing objects: 100% (3/3), 303 bytes | 0 bytes/s, done. 
Total 3 (delta 0), reused 0 (delta 0) 
remote: warning: updating the current branch 
To C:/git/.\pc_repo\.git 
    eb4f07f..4925c26 master -> master 
C:\git\laptop_repo [master]> cd .. 
C:\git> cd .\pc_repo 
C:\git\pc_repo [master +0 ~1 -0]> git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: text.txt 
# 
C:\git\pc_repo [master +0 ~1 -0]> git reset --hard 
HEAD is now at 4925c26 modified text 
C:\git\pc_repo [master]> git status 
# On branch master 
nothing to commit, working directory clean 
C:\git\pc_repo [master]> 
1

чтобы отменить толчок удаленного репозитория:

git push -f origin HEAD^:master 

эта команда будет перематывать удаленный репозиторий обратно на один совершить ,

Чтобы отменить тянуть, вы можете сделать это:

git reset --hard {hash of the last commit before pull} 

Имея центральный чистый репозиторий будет полезно, но ... это просто еще один репозиторий, где вы можете нажать на и тянуть с;

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