사실 큰 문제는 아니었지만, main 브랜치의 내용을 다시 pull 해와서
내가 따로 판 브랜치에서 작업을 하고 싶었다.
그런데 main 브랜치 내용이 제대로 pull 되지 않았었다.
$ git pull
인 줄 알았다.. 그냥 pull을 해오면 된다고 생각해서 아무런 생각 없이 저렇게만 입력하니
당연하게 아무것도 실행이 안되는 것이었다 ..
$ git pull origin <브랜치명>
이렇게 해오면 된다!
나는 main 브랜치 내용을 pull 해오고 싶었기 때문에,
$ git pull origin main
이렇게 작성 후 실행해주었더니 원하는 대로 main 브랜치의 내용들을 pull 해올 수 있었다.
명령어를 올바르게 작성해서 실행해야 한다 ..
pull 하는 명령어를 제대로 알게 되어서 다행이라고 생각한다.
한 번 알게 되니까 그 다음부터는 $ git pull origin main 하면서 바로바로 잘 쓸 수 있게 되었다!
pull 하는 방법을 배워서 잘 쓰고 있었는데, 갑자기 오류를 만나게 되었다.
error: Your local changes to the following files would be overwritten by merge:
.
.
.
Please commit your changes or stash them before you can merge.
이런 오류의 내용인데 ,,
뭔가 pull 해오기 전에 파일을 잘못 건드려서 발생한 오류 같았다.
일단 pull 전에 내용을 커밋하라는 내용이 먼저 보여서 commit을 시도했다.
그런데 ... commit이 되지 않았다 ..
분명 변경 사항이 있긴 해서 커밋 메시지를 작성하고 commit을 했는데, 안되어서 다른 방법을 찾아봤다.
$ git stash
를 사용하면 된다 !
stash라는 명령어는 현재 디렉토리 파일을 임시로 백업하고, 깔끔한 상태로 돌려준다고 한다.
내용을 pull 해오는 것도 안되고, commit도 제대로 안되는 상황에서 갈팡질팡 했는데,
크게 수정했던 내용이 없었기 때문에 git stash 명령어로 해결할 수 있었다 !
하나의 메소드를 선언해두고, 그 안에서 입력받은 값에 따라 다른 메소드를 호출하도록 코드를 만들었다.
public void mainMenu() {
Scanner sc = new Scanner(System.in);
while(true) {
Integer i = sc.nextInt();
sc.nextLine();
if (i == 1) {
메소드1();
} else if (i == 2) {
메소드2();
} else {
System.out.println("반복문 종료");
break;
}
} // while
}
그리고 메소드1과 메소드2안에 해당 메소드의 내용이 끝나면 다시 mainMenu()를 불러오도록 코드를 작성했다.
이렇게 했더니 다른 메소드로 돌아와 다시 메인 메뉴를 불러 왔을 때,
종료가 되지 않는 끔찍한 상황이 발생했다.
다시 mainMenu()가 반복되어서 실행되지 않도록 메소드 아래에 break; 조건을 걸어주면 된다는 도움을 받아 코드를 수정해보았다.
public void mainMenu() {
Scanner sc = new Scanner(System.in);
while(true) {
Integer i = sc.nextInt();
sc.nextLine();
if (i == 1) {
메소드1();
break;
} else if (i == 2) {
메소드2();
break;
} else {
System.out.println("반복문 종료");
break;
}
} // while
}
반복은 되지 않았는데, 중간에 다른 메소드로 넘어가면서 더 이상 메인이 호출되지 않고 멈춰버렸다.
public void mainMenu() {
Scanner sc = new Scanner(System.in);
while(true) {
Integer i = sc.nextInt();
sc.nextLine();
if (i == 1) {
메소드1();
} else if (i == 2) {
메소드2();
} else {
System.out.println("반복문 종료");
break;
}
} // while
}
mainMenu() 메소드 안에 종료해야하는 else 부분만 제외하고 break;를 다 지워주었다.
그리고 메소드1과 메소드2 안에서 마지막에 mainMenu()를 호출하는 부분을 지워줬다.
제대로 실행되는 모습을 확인할 수 있었다 !
종료 조건을 제대로 설정해주지 않은 while(true) 무한 루프 상황에서,
다른 메소드를 부르고 다시 while(true) 무한 루프가 있는 메소드를 호출할 경우,
무한 루프가 여러개 도는 상황이 발생하여 종료 조건에 해당해도 제대로 종료가 안되는 것을 알게 되었다.
무한 루프가 있는 메소드 안에서 다른 메소드를 호출하고, 다시 무한 루프가 있는 메소드를 호출하려고 하는 경우에는, 종료 조건을 잘 파악하고 코드를 작성해야 할 것 같다.