Push : Local -> Remote

# git push origin HEAD:refs/for/branch


통상 위와 같은 명령어로 수정된 commit을 push 한다. (gerrit을 사용하는 경우)

명령어를 하나하나 뜯어보자


 명령어

 의미 

 git

 

 push

 

 origin

  리모트 저장소의 URL을 의미함

  # git remote -v 

        origin https://git.ourcompany.com/your-project.git (fetch)

        origin https://git.ourcompany.com/your-project.git (push)


  ref. https://code.i-harness.com/ko-kr/q/506ce8

  ref. https://stackoverflow.com/questions/8190392/is-there-a-git-command-that-returns-the-current-project-name

 HEAD

   Commit 한 내용

 :refs/for/branch

   Push할 remote branch

   refs : reference spec(refSpec)

   gerrit을 사용할 때 remote branch에 push 하기 위한 spec 인 것이다.




ref. https://mytory.net/archives/12632



'20. Programming > Tools - GIT' 카테고리의 다른 글

GIT 기본적 명령어 (수정되돌리기 추가)  (0) 2018.10.30
GIT - Change-Id 자동으로 넣기  (0) 2018.05.18
GIT - commit message  (0) 2018.05.18
GIT 기본 파일들  (0) 2018.05.18
 
명령어  설명
 # git pull  
 # git pull --rebase  git pull 할 때, merge branch가 발생하는 것 방지 
 # git status  
 # git add --all  수정된 모든 파일/폴더 commit 하기 위한 상태로 만든다.
 # git commit -m "msg"  commit 및 commit 메시지를 만든다.
 # git push origin HEAD:refs/for/'branchName'  수정된 내용을 Branch에 반영  (gerrit 을 사용할 때)
 # git branch -r  remote의 branch를 보여줌
 # git ls-remote  remote의 tag, branch 들을 모두 보여준다.
 # git diff   unstaged 상태(git add 전 상태)의 파일을 변경사항을 보여준다.
 # git diff --cached  staged 상태(git add 후 상태)의 파일을 변경사항을 보여준다.
   
git log --format="%C(auto)%H" --no-merges -1  
git log --format="%C(auto) %h %s" --no-merges --since=2.weeks  

 

 

- 수정내용 되돌리기

 1. UnStage 상태 일 때 (파일 변경만 해 놓은 상태),
   # git checkout .   전체 파일을 변경을 원래로 돌린다.
   # git checkout -f (or --force)   전체 파일을 변경을 원래로 돌린다. ( # git checkout . 와 동일 )
   # git checkout filename   특정 파일을 변경을 원래로 돌린다.
   # git checkout folderName    특정 폴더의 변경을 원래로 돌린다.
     
 2. Stage 상태 일 때 (git add --all 한 경우)
   # git reset   unstage 상태로 바꾼다.  ( 변경 상태는 유지 )
   # git reset --hard   모든 파일을 변경을 원래로 돌린다. (파일을 변경전으로 돌림)
     
 3. Commit 한 경우
   # git reset --soft HEAD^   모든 파일을 stage 상태로 만들고, commit만 취소한다.
   # git reset  HEAD^   모든 파일을 unstage 상태로 만들고, commit을 취소한다.
   # git reset --hard HEAD^   모든 파일을 변경을 원래로 돌린다. (파일을 변경전으로 돌림)
     
     
     

ref > http://hochulshin.com/git-revert-changes/

 

- git diff

 1. commit된 파일상태와 현재 수정중인 상태 비교
   # git diff   수정한 파일들의 수정 내용 확인
 2. commit된 파일상태와 add된 파일 상태 비교
   # git diff --stated   git add 후에 수정 내용 확인
 3. commit간의 상태 비교하기 - HEAD 이용
   # git diff HEAD HEAD^   가장 최근의 커밋과 그 전의 커밋을 비교한다
 4. commit간의 상태 비교하기 - commit hash 이용
   # git diff 048171 0c747d   commit의 hash 를 이용한 비교, tagbranch의 hash로도 가능
 5. branch간의 상태 비교하기 - HEAD 이용
   # git diff feature/test origin/master 서로 다른 Branch 와의 diff
     
 

'20. Programming > Tools - GIT' 카테고리의 다른 글

Gerrit 에서 HEAD:refs/for/branch 의미  (0) 2018.11.06
GIT - Change-Id 자동으로 넣기  (0) 2018.05.18
GIT - commit message  (0) 2018.05.18
GIT 기본 파일들  (0) 2018.05.18

 

Change-Id는 cherry-picks 와 git commit --amend 등등 commit을 tracking (찾기) 하는 용도로 사용된다.

(ref site : https://gerrit-review.googlesource.com/Documentation/cmd-hook-commit-msg.html)

 

commit을 할 때, 자동으로 들어간다면 편하겠지.

 

이걸 할라면 githooks (https://git-scm.com/docs/githooks) 를 알아야 한다.

위 사이트 정독 필요한데 대충 이해한 것만 포스팅함..

 

git init may copy hooks to the new repository, depending on its configuration. See the "TEMPLATE DIRECTORY" section in git-init[1] for details. When the rest of this document refers to "default hooks" it’s talking about the default template shipped with Git. 

 

 

간단 원리 설명 (Change-Id 자동 입력에 대해서만)

commit message 저장 하면 (vi editor에서 저장하면

1. .git/COMMIT_EDITMSG 파일이 생성

2. .git/hooks/commit-msg   .git/COMMIT_EDITMSG 이 수행되어

commit message 중에 comment 부분을 모두 삭제

Change-Id를 얻어온 후 COMMIT_EDITMSG에 Change-Id 삽입

 

 

 

 

 

(1) How to set

- .git dir 하위에 바로 적용

hooks dir 생성

project dir ] $ mkdir  ~.git/hooks/

 

commit-msg 파일 얻기

$ scp -p -P 29411 account@(your Gerrit review server):hooks/commit-msg  .git/hooks/

 

 

(2) How to set

- template dir를 지정한 후 사용

- 장점 :  - 여러 project에 동일하게 적용해야 할 때 편리함.

            - git clone 하면 자동적용됨 (git clone 시 git init이 수행됨)

template dir 지정

$ git  config  --global  init.templatedir  ~/git_template_dir

 

hooks dir 생성

$ mkdir  ~/git_template_dir/hooks/

 

commit-msg 파일 얻기

$ scp -p -P 29411 account@(your Gerrit review server):hooks/commit-msg ~/git_template_dir/hooks/

 

현재 project에 적용 (git init을 하면 template dir 의 내용을 .git dir 하위에 모두 복사한다.)

project dir ] $ git init

 

hooks 확인 (commit-msg 파일이 있는지)

project dir ] $ ls -al  ./.git/hooks/commit-msg

 

Change-Id 들어 갔는지 확인 (commit message를 저장 한 후. .git/COMMIT_EDITMSG를 확인한다)

project dir ] $ cat .git/COMMIT_EDITMSG

 

 

'20. Programming > Tools - GIT' 카테고리의 다른 글

Gerrit 에서 HEAD:refs/for/branch 의미  (0) 2018.11.06
GIT 기본적 명령어 (수정되돌리기 추가)  (0) 2018.10.30
GIT - commit message  (0) 2018.05.18
GIT 기본 파일들  (0) 2018.05.18


기본적으로  commit message는

아래 명령어로 간단하게 만들 수 있다.

$ git commit -m "messages~~~~~~~~~"


하지만 이렇게 간단하게 하는 경우는 드물지.

따라서 commit message template 를 미리 만들어 놓고, 내용을 수정 하여 commit 하면 편하다.


Step 1. commit template 지정

$ git config --global commit.template ~/.gitmessage.txt


Step 2. editor 지정

$ git config --global  core.editor  vim


Step 3. ~/.gitconfig에 제대로 적용되었는지 확인 (세 개 중 아무거나)

$ git config --global -l  or 

$ git config --global --get commit.template 

$ cat ~/.gitconfig)


그리고 commit 할 때, 

$ git commit


하면, vim 이 실행되면서 설정한 ~/.gitmessage.txt 파일이 올라 올 꺼임.


commit message가 저장되면 .git/COMMIT_EDITMSG 파일에 그 내용이 저장되고

git push 를 하면 그 내용을 gerrit 서버로 올린다.


GIT 을 위한 파일들 (included Folder)

(project dir)/.git                 : repository 기본 폴더

(project dir)/.git/config       : git 명령어를 사용되어 지는 git local config 파일

~/.gitconfig : git 명령어를 사용되어 지는 git global config 파일


(project dir)/.git/config

[core]

repositoryformatversion = 0

filemode = true

bare = false

logallrefupdates = true

[remote "origin"]

url = ssh://hakhyun.jee@계정:29411/프로젝트

fetch = +refs/heads/*:refs/remotes/origin/*

[branch "branch name"]

remote = origin

merge = refs/heads/ branch name

[branch "branch name"]

remote = origin

merge = refs/heads/ branch name


.gitconfig

[user]

name = hakhyun.jee

email = hakhyun.jee@계정

[init]

        templatedir = /data001/hakhyun.jee/git_templateDir

#    templatedir = /data001/hakhyun.jee/.git_template

[core]

editor = vi

editer = vim

[merge]

tool = vimdiff

[commit]

template = /data001/hakhyun.jee/git_templateDir/git_commit_template.txt

[color]

ui = auto

[gerrit]

        createChangeId = true


[alias]

    gr = log --graph --full-history --all --color --pretty=tformat:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s%x20%x1b[33m(%an)%x1b[0m"



config 파일 ((project dir)/.git/config ~/,gitconfig) 에 config 내용 추가 / 수정 / 삭제 / LIST / GET

추가 : $ git config --global --add user.name hakhyun.jee

수정 : $ git config --global --replace-all user.name hakhyun.jee

삭제 : $ git config --global --unset user.name hakhyun.jee

LIST :  $ git config --global -l

GET :  $ git config --global --get user.name hakhyun.jee

--local : (project dir)/.git/config 에 추가

--global : ~/.gitconfig에 추가



ref site : https://git-scm.com/docs/git-config

+ Recent posts