본문 바로가기

형상관리 Git

깃 초기 설정에서 필요한 명령어들과 알고리즘 포스팅을 위한 과정설명(중요)

cmd에서 숨어있는 폳더까지 모두 보는 명령어 dir -ah

출처: https://m.blog.naver.com/jed00/140188844895

초기설정:

폴더를 새로만든후 git init으로 git이 감시하는 대상의 폴더로 만든후 remote에 있는 branch들을 불러오려고 한다. 이럴 때 쓰는 명령어가 git remote update 이다. 이 명령어를 사용하기 이전에는 아무리 git checkout + 원격에있는브랜치 이름 을 해봐도 응답이 없다. 하지만git remote update를 하면 원격의 branch들이 update되면서 git checkout +원격에 있는 브랜치 이름 으로 로컬에 있는 branch와 원격의 branch를 일치 시킬수 있다. 

 

이제 알고리즘 문제를 깃에 포스팅할텐데 크게 2가지 상황이 있을것같다.

상황1. 풀이 파일을 내 AlgoGit에 복붙한후 그것을 Github에 반영하기.

복붙한다 -> git status로 새로운 파일이 Untracked 상태임을 확인한다 -> git add . -> git commit -m "남기고싶은 커맨트" ->git remote로 origin에 연결된 상태인지 확인 연결되어 있지 않다면 git remote add origin Repository주소입력 -> git push origin main 

상황2. 깃헙에서 특정파일을 UI를 사용해 삭제한것을 내 로컬 깃 폴더에도 반영해야 할때
git remote를 통해서 원격과 연결되어 있는지 확인. 연결되어 있지 않다면 "git remote add origin 원격repository주소"를 이용하여 원격저장소와 연결 -> git pull origin main 명령어를 이용하여 원격저장소의 변경된 사항을 내 로컬에도 반영. 끝

마지막으로 원격(github)에서 다수의 브랜치들이 있었고 이를 깃헙의 UI를 이용해 주어 삭제해 주었는데도 cmd로 git branch -a 을 해보면 그대로 나오는 경우가 있다. 그럴때는 

git remote prune origin

이라는 명령어를 쓰면 단숨에 정리되다.

 

 

push하기전 반드시 해주어야 하는 것. 
1.로컬 저장소에 commit해야함 git commit -m "message content"

2. 원격 저장소를 지정해주어야 함. git remote add origin https://github.com/dhflekddy/BOJ.git

그리고 마지막으로 원격 저장소에 push! 이때 단순히 git push origin(원격저장소별명) + 원격 브랜치이름 으로 할수도 있고
   git push -u https://github.com/dhflekddy/BOJ.git 도 가능함.

 

 

 

셀프확인과제


1.원격에 폴더를 생성하자. 

Create new file클릭한다. file이라고 하지만 이렇게 폴더를 생성할 수 있다

만들고자 하는 폴더 명을 입력한후 슬러시( / )를 마지막에 붙이면 그게 곧 폴더가 된다. 그리고 마지막에는 의무적으로 파일명을 입력한다. 입력할게 없다면 그냥 무난하게 Readme.txt로 하자

 

2. 원격의 폴더안에 파일을 넣어보자(알고리즘 깃헙 만드는 중요한 방법)

 

방법1. 가장 정석적인 방법으로 내가 푼 문제의 java정답 파일을 내 AlgoGit파일의 알맞은 위치에 복붙하는 것에서 시작한다.
(가장 초기 단계. 처음에만 필요함. 내가 로컬 repository로 지정하고 싶은 위치에서 git init한다) 지금 내 컴터에 있는 로컬저장소의 branch가 어느 branch인지 확인한다(git branch). git status로 현재 stagingArea에 내가 commit하고 싶은 파일이 있는지 확인한다(git이 관리하는 폴더라면 단순히 앞에서 복붙해주었던것을 인지하고 Untracked files라고 해서 빨간색으로 표시해준다. 그럼 그냥 그 복붙했던 것을 git add +파일명 해주면 된다. 없다면 "git add 파일명" 으로 staging Area에 내가 commit하고자 하는 파일을 stagingArea로 옮긴다. (중요! git add 파일명 을 하더라도 git status를 해보면 내가 원하는 파일이 stagingArea로 올라오지 않을때가 있는데 이는 내가 이전에 한번 commit했던 파일과 변경사항이 없는 동일한 파일이기 때문이다. 따라서 파일에 간단한 변화를 준후에 다시 git add파일명을 해보면 파일이 stagingARea로 올라오는 것을 확인할 수 있다. 여기서 매우매우 해맸다. 중요하니 꼭기억하자) => git commit -m "메시지 변경전" 명령어로 Local Repository Area로 해당 파일을 옮긴다. => 내가 연결하고자 하는 Remote repository의 주소를 복사하여(github의 해당repository에 있다)명령어 git remote add origin [깃허브 주소]으로 원격에 있는 해당 저장소와 연결시킨다(확인하는 명령어는 git remote) => 이제 드디어 원격 저장소로 파일만 push하면 된다. 여기서 확인할 것이 원격저장소의 branch가 로컬의  내가 사용하고 있는 branch와 같은 브랜치 여야 한다는 것이다. 즉, 내가 로컬에서 main브랜치를 사용하고 있으면 "git push origin main"이라는 명령어로 원격 브랜치이름인 main을 꼭 넣어 주어야 한다. 안그러면 fatal: The current branch main has no upstream branch. 와 같은 오류가 난다. 이제 다 됐다. 깃헙의 알맞은 repository와 branch를 설정하여 확인해 보면 push된 것을 확인할 수 있다!!!



방법2. 원격에 있는 해당하는 branch의 저장소를 통째로 가져오는 pull명령어 
이 방법에 들어가기 앞서 원격의 내가 원하는 branch와 내 컴퓨터에서의 branch가 맞아야 한다. 즉 원격의 master 브랜치의 저장소를 가져와야 하는데 내 쪽에서는 main 브랜치에 머물러 있다면 안된다는 말. 내가 어떤 브랜치에 있는가는 git branch 명령어로 확인하고 branch를 바꾸는 명령어는 git checkout 바꾸고자하는 원격의 브랜치명 으로 브랜치를 바꾼다. 그후 git pull origin master 명령어로 원격 저장소를 가져온다.=> 이렇게 하면 원격저장소의 그 모든 폴더구조가 나의 git.init한 디렉토리 위치로 불려오게 된다 => 내가 원하는 파일을 원하는 폴더 속으로 복사 붙여넣기 한다=>  git add . => git commit -m "전달할메시지" => git push  끝!

 

3.이미 원격 Repository에 push까지된 커밋의 커밋 메시지를 수정하기.

간단하다. 그냥 git pull origin main(브랜치이름) 명령어로 원격 저장소를 pull해온후 해당파일의 이름이나 안의 코드의 사소한 부분을 수정하고 다시 그것을 add, commit할때 메시지를 바꾸어 주면 된다. 그리고 다시 push.

 

4. 원격 저장소에 있는 브랜치 삭제하기

git push origin -d +원격에있는 브랜치 이름

==>원격에 있는 브랜치 삭제방법(물론 origin은 저장소의 별칭)

이와 같은 방법으로 삭제할수 있다. 하지만 원격 저장소에서 default로 설정되어 있는 branch라면 삭제할 수 없다. 이때 2개의 branch가 있다고 가정하고 1이 default branch 2가 보통 branch일때 1을 삭제하고싶은데 default branch이기 때문에 삭제할 수 없다면 2로 default branch를 바꾸어 주면 된다. 이 방법을 설명하면 아래와 같다.

==>Settings로 가서
디폴트 브랜치 설정을 바꾸어주면된다. 나는 지금 하나의 브랜치만 있기때문에 표시되지 않는것임

 

 


FACT!!!
서로 애초에 관계가 없는 두 브랜치는 "git pull origin 원격브랜치명" 명령어를 사용하여 merge할수 없다.
(fatal: refusing to merge unrelated histories 에러뜸)(그래서 로컬을 기존에 있는 main브랜치로 두고 git pull origin main을 했을때 옆의 애러가 뜬거임)
그리고 로컬에서 새로운 브랜치를 생성하고 git pull origin main을 해도 같은 애러가 뜬다. 왜? 로컬의 프로젝트파일 시스템과 원격의 프로젝트파일 시스템의 구성이 다르므로(내생각)

따라서 내 가정은!!!원격에서 브랜치를 가져와 그것을 토대로 로컬 브랜치를 생성하면(git branch localBranch origin/원격브랜치명) 원격의 해당 브랜치에 있는 파일구조가 그대로 로컬에 나타나야 한다(git checkout localBranch)(맞았음).

또한 위와같이 원격에서 브랜치를 가져와 그것을 토대로 로컬 브랜치를 생성하면(git branch localBranch origin/원격브랜치명) 그 브랜치에서 "git pull origin 원격에 있는 아무 브랜치명(원격의 main)"을 하면 원격의 main브랜치에 있는 GRAPH폴더의 파일들이 다 보일지 보이지 않을지는 모르는 것이고 만약 그 main브랜치에서 새로운 commit내용이 있다면 그 사항이 반영되어 보일것이다!!!(맞았음)

 

 

 

 

출처: https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80#ch03-git-branching

 

선생님들 깃에 관해 하나만 물어볼께요.
1)remote에서 하나의 저장소에 A라는 하나의 브랜치만 있었습니다. 그리고 같은 저장소에 B 라는 브랜치를 하나더 추가하고 그 브랜치에는 폴더를 하나 추가해 주었습니다. 이것을 로컬에서 A브랜치도 pull하고 B브랜치도 pull하였습니다. 그랬더니 로컬저장소에는 그 B에만추가된 폴더가 그대로 남아있습니다.
즉, 로컬 저장소는 원격 저장소의 2개의 브랜치중에 폴더가 더 많은 쪽을 pull로 받아 오는 결과를 보인것입니다.

2)그런데 그후 제가 A브랜치에 있는 특정 파일을 삭제하고 그것을 로컬에서pull하고, 모든 파일이 그대로 남아있는 B브랜치도 pull을 하였습니다. 그런데 삭제된 파일은 그대로 삭제되었더라구요 그 파일이 남아있는 B브랜치도 pull을 하였음에도 불구하구요.

1)을 보았을때는 로컬에서 pull을 하면 더 많은 정보(폴더)를 가지고 있는 브랜치 B의 버전을 따랐다면 2)에서도 마찬가지로 파일이 지워졌더라도 파일이 지워지지 않은 B의 버전을 따라야 하는거 아닌가요?

=> 이 질문에 대한 답변: 브랜치는 새롭게 생성되는 commit이라는 객체를 가리키는 포인터이다. pull을 아무리 받아도 pull을 주는 쪽에서 새로운 commit내용이 생성되지 않으면 어떠한 변화도 없다.