핀수로그
  • commit 복구하기 / java list 자르기
    2022년 08월 04일 23시 42분 17초에 업로드 된 글입니다.
    작성자: 핀수
    728x90
    반응형

    git reset 을 reset 하기 (commit 복구하기)

    개발 브랜치에서 작업을 하고 있었는데 다른 요청이 들어왔다.
    우선 순위가 더 높은 작업이었기 때문에 지금 하고 있던 작업을 다른 브랜치에 옮겨 놓고,
    merge 하기 전, 아무튼 기준이 되는 포인트로 돌아가서 깨끗한 상태에서 작업을 하려고 했다.
    옮기고..reset 명령어를 사용해 원하는 포인트로 돌아갔다.

    실시간으로 작업해둔 것들이 사라지는 것을 확인했다.
    그리고 옮겨놓은 브랜치로 이동했는데...
    변경한 작업 이력이 모두 사.라.졌.다!

    음?
    휴가에서 갓 돌아온 나..아직 시차적응이 안됐나보군(집콕했죠?)
    하며 reset 을 reset 하는 방법을 찾아봤다.

    git reflog

    명령어를 통해서 git 이력을 확인할 수 있다.

    예시 이미지

    돌아가고 싶은 지점(id)을 복사한 뒤

    git reset [커밋아이디]

    명령어를 실행하면 된다.
    아이디 말고 HEAD@{1} 을 입력해주어도 된다.
    다만 '' 따옴표를 붙여주어야 에러가 나지 않는다.
    (안붙이면 스위치 에러가 난다.)

    하지만 난...커밋을 하지 않고 이런 만행을 저질렀고..
    다행히 작업량이 많지 않아서 괜찮았지만
    다시는 이런 실수를 하지 말아야겠다고 다짐했다.

    List 의 특정 영역을 자르기

    in Java

    크기가 다른 두개의 리스트 중 작은 크기에 맞춰 리스트를 수정해야한다.
    예를 들어 사이즈가 100인 a 리스트와 85인 b 리스트가 있으면
    a 리스트의 사이즈를 85로 만든다.

    1. subList(int startIndex, int endIndex)
    - 새로운 리스트를 반환한다.
    - 지금은 문제되지 않으나 메모리 누수의 여지가 있으므로 알고 써야한다.
    - 참고 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=yjw2288&logNo=221072561904

    @Test
    public void subListTest() {
        int sizeA = (int) ((Math.random() * 100) + 1);
        int sizeB = (int) ((Math.random() * 100) + 1);
        List<Integer> listA = makeList(sizeA);
        List<Integer> listB = makeList(sizeB);
    
        System.out.println("----before----");
        printSize("listA", listA);
        printSize("listB", listB);
    
        int standardSize = Math.min(listA.size(), listB.size());
    
        if (listA.size() > listB.size()) {
            listA = listA.subList(0, standardSize);
        } else {
            listB = listB.subList(0, standardSize);
        }
    
        System.out.println("----after----");
        printSize("listA", listA);
        printSize("listB", listB);
    }


    2. removeRange()
    - 새로운 리스트를 반환하지 않고 기존 리스트의 요소를 삭제한다.
    - 접근제어자가 protected 이므로 ArrayList 를 상속받아 사용해야한다.
    - 일반적으로 사용되지는 않는다고 한다.

    public class ListRemoveTest extends ArrayList<Integer>{
    
        @Test
        public void removeRangeTest(){
            ...
    
            int standardSize = Math.min(listA.size(), listB.size());
    
        	// listA, listB = new ListRemoveTest();
            if (listA.size() > listB.size()) {
                listA.removeRange(standardSize, listA.size());
            } else {
                listB.removeRange(standardSize, listB.size());
            }
    
            ...
        }
    
    }


    3. List.subList().clear()
    - subList() 를 통해 반환된 요소를 clear()

        int standardSize = Math.min(listA.size(), listB.size());
    
        if (listA.size() > listB.size()) {
            listA.subList(standardSize, listA.size()).clear();
        } else {
            listB.subList(standardSize, listB.size()).clear();
        }

    728x90
    반응형
    댓글