2014-01-29 4 views
2

나는 git를 자주 사용하지만 나는 "git language"의 세부 사항에 대해 매우 깊은 이해를하지 못했다 ...git pull 또는 git push를 실행 취소하는 방법은 무엇입니까?

나는 내 컴퓨터에 하나씩 두 개의 디렉토리가있다. 둘 다 .git 저장소가 있습니다 (즉, 베어되지 않습니다!).

내 랩톱은 ssh를 통해 내 PC에 연결하고 랩톱에서는 PC에 연결합니다 (SSH 원격 추가).

체크 아웃 된 분기 (노트북 PC에서)로 푸시 할 수 없기 때문에 PC에 두 개의 분기 (마스터 및 랩톱 마스터)가 있습니다. 그래서 밀어 넣은 다음 PC에서 분기를 병합합니다.

어떤면에서 나는 올바른 질서를 엉망으로 만들고 갈등이 있습니다.

git log, git diff (및 gitk)를 사용하여 작업을 정리하려고합니다. 내가이 명령은 위험

git reset --merge 

사용했다 병합을 취소를 들어

?

리모콘에서 끌어 오기 또는 푸시를 취소하려면 어떻게해야합니까?

충돌을 피하기 위해 "중앙"리포지토리가 필요합니까 (이것이 베어 리 저장소를 의미한다고 생각하십니까?).

체크 아웃 된 원격의 지점으로 푸시 할 수없는 이유는 무엇입니까? 위험하지 않은 방식으로 이것을 강제로 적용 할 수 있습니까?

모든 힌트가 좋은 ... 감사

답변

1
  • git reset --merge을 할 위험하지 않습니다.

  • git pullgit reset --hard에서 까지 커밋을 수행하여 "실행 취소"할 수 있습니다.

  • git push

    는에 git reset을 수행하여 "취소"가 될 수 실제로 해당 지역의 repo에서 원하는 당신을 커밋하고보다 표준 설치 될 git push -f

  • 중앙 저장소를 수행하여 밀어 강제.

왜 체크 아웃 된 리모컨의 지점으로 푸시 할 수 없습니까?

외부 레포가 변경 사항을 저장소로 가져 와서 변경 사항을 얻는 것이 일반적으로 혼란 스럽기 때문에.

일부 위험한 방식으로 강제로이를 수행 할 수 있습니까?

당신은 (내가 알기로 당신의 PC의 REPO)를 그 REPO에서이 명령을 실행하여 그것을 허용하는 자식을 구성 할 수 있습니다

git config receive.denyCurrentBranch warn 

그럼 당신은 체크 아웃 지점에 대한 변경 사항을 푸시 할 수 있습니다. 그러나 pc repo로 전환하면 변경 사항이 작업 트리에 반영되지 않으므로 혼란스러운 상태가됩니다. 변경 사항을 취소 한 것처럼 보일 것입니다 (repo에 있지만 작업중인 트리에 있지 않기 때문에).

푸시 된 변경 내용은 git reset --hard까지 얻을 수 있지만 로컬 변경 사항은 무시됩니다. 로컬 변경 사항이있는 경우 수동으로 복원해야 할 각 파일은 git reset HEAD <file>git checkout -- <file>입니다.

다음은 설정을 변경하고, 랩톱으로 전환하고, 변경하고, 변경 한 후 스위치를 전환하는 예제입니다.

git push -f origin HEAD^:master 

이 명령을 다시 한 커밋 원격 저장소를 되감 :

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

원격 저장소에 푸시을 취소하려면 : PC에, 그리고 작업 트리의 변화를 얻기 위해 그 REPO를 재설정 . 그것은 당신이 밀어에서 뽑을 수 또 다른 자식 저장소의 ...

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

중앙 베어 저장소가 도움이 될 것 갖는 있지만;

가 풀을 취소하려면, 당신은이 작업을 수행 할 수 있습니다

관련 문제