0. Git의 일상 사용

15815 단어 Git

git를 처음 알았을 때 대략적인 것과 일부 기본 개념, 예를 들어 임시 저장, 제출, 지점 등을 이해할 수 있을 뿐이다.일상적인 업무에 적합한 일반적인 지침을 요약합니다.


1. 로컬 코드 제출
작업공간의 코드 상태를 보려면 다음과 같이 하십시오.
git status

터미널에는 다음과 같은 정보가 표시됩니다.
On branch master  
      Changes to be committed:
      (use "git reset HEAD  ..." to un-stage)

       new file:   src/main/res/layout/letv_live_time_vs_content.xml

      Changes not staged for commit:
      (use "git add  ..." to update what will be committed)
      (use "git checkout --  ..." to discard changes in working directory)

          modified:   src/main/res/layout/letv_live_time_live_item.xml
          modified:   src/main/res/values/colors.xml
          modified:   src/main/res/values/dimens.xml
          modified:   src/main/res/values/strings.xml

알림 정보에 의하면 현재 지점 마스터에 새로 추가된 파일이 있는데 제출할 준비가 되어 있습니다.수정된 네 개의 서류가 아직 임시로 저장되지 않았다.
다음은 여러 가지 방법으로 파일을 임시 저장합니다.
git add src/file1    src    file1  
git add src/         src        
git add .                      

여기서 우리가 가장 많이 사용하는 것은 디렉터리 아래의 모든 파일을 임시로 저장하는 두 번째 명령이다.첫 번째 단일 임시 저장 방식은 너무 번거롭고, 세 번째 모든 추가는 필요하지 않은 파일을 임시 저장할 수 있다.
터미널에서 실행:
git add src/

그런 다음 작업공간의 상태 정보를 확인합니다.
git status
     On branch master
     Changes to be committed: 
       (use "git reset HEAD ..." to unstage)

      modified:   src/main/res/layout/letv_live_time_live_item.xml
      new file:   src/main/res/layout/letv_live_time_vs_content.xml
      modified:   src/main/res/values/colors.xml
      modified:   src/main/res/values/dimens.xml
      modified:   src/main/res/values/strings.xml

터미널 알림 정보: 현재 마스터 지점에 있습니다. 네 개의 수정된 파일, 새로 추가된 파일 하나가 임시 저장되어 제출 준비를 하고 있습니다.
그 다음에 서류를 제출하는 방법도 다양하다. 여기는 가장 안전한 두 가지만으로도 충분하다.\
git commit -m "commit note"          ,    "commit note"
git commit --amend            ,    vim    ,     .         .

터미널에서 실행: git commit -m "modify setting page layout"
[master dcd6316] modify settings page layout
5 files changed, 24 insertions(+), 24 deletions(-)

마스터 지점에서 제출, commit-id: dcd6316 5개 파일 변경, 24줄 코드 추가, 24줄 코드 삭제, 로컬 제출 성공.
2. 서버의 코드 라이브러리에서 코드 동기화
코드가 로컬에서 제출된 후 작업 공간은 clean 상태여서 후속 작업에 편리하고 서비스 측의 코드를 끌어올릴 수 있습니다.
git fetch origin dev_letv_global //        dev_letv_global    ,           .
git fetch origin dev_letv_global:temp //        dev_letv_global        temp   .

여기서:origin은 기본 원격 창고의 이름입니다. devletv_글로벌은 원격 창고의 한 지점입니다. (관리자 이름)
터미널 콘솔에 다음과 같은 정보가 나타납니다.
From ssh://legit.letv.cn:29418/terminal/tv-letv-global
        * branch            dev_letv_global -> FETCH_HEAD
          1fe4874..1948cbe  dev_letv_global -> origin/dev_letv_global

실행:
git rebase FEATCH_HEAD 

또는:
git rebase temp

코드 서버의 코드와 로컬 코드rebase를 입력하십시오.
주의: 이 조작을 실행하기 전에 로컬 코드를 제출하고 작업 공간이 clean 상태인지 확인하십시오. 그렇지 않으면 조작할 수 없습니다.git는 해당하는 알림을 줄 것입니다.
rebase 프로세스 중git에서 관련 정보를 반환합니다.
Current branch master is up to date.

이 지점의 코드가 이미 최신이거나
First, rewinding head to replay your work on top of it...   
Applying: 1.add loading view to Live and Category page.

리베이스 과정 중 어떠한 충돌도 없었다는 것을 설명합니다. (운이 좋았습니다.) 마스터 지점의 코드는 이미 최신식이어서 서버에 제출할 수 있습니다.그러나 대부분의 경우git는 다음과 같은 힌트를 준다.
localhost:letv congguangzi$ git rebase FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: 1. modify the category layout
Using index info to reconstruct a base tree...
M   src/main/res/values/dimens.xml
Falling back to patching base and 3-way merge...
Auto-merging src/main/res/values/dimens.xml
CONFLICT (content): Merge conflict in src/main/res/values/dimens.xml
Recorded preimage for 'src/main/res/values/dimens.xml'
error: Failed to merge in the changes.
Patch failed at 0001 1. modify the category layout
The copy of the patch that failed is found in: .git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

rebase 과정에서 충돌이 발생할 수 있음을 알립니다. 여기에는 안드로이드 스튜디오를 사용하여 충돌을 처리합니다.Android Studio는 기본적으로 충돌을 해결하는 플러그인을 통합하고 강력하며 권장합니다.충돌 처리가 완료되면 작업공간의 상태를 봅니다.
rebase in progress; onto 72abc7d
You are currently rebasing branch 'master' on '72abc7d'.
  (all conflicts fixed: run "git rebase --continue")

Changes to be committed:
  (use "git reset HEAD ..." to unstage)

    modified:   src/main/java/com/letv/tv/category/presenter/OtherTitlePresenter.java
    new file:   src/main/res/drawable/letv_category_other_title_bg.xml

알림은rebase 과정에서 이미 모든 충돌을 처리했기 때문에rebase를 계속할 수 있습니다. 알림에 따라 실행할 수 있습니다. git rebase --continuerebase 과정을 완성합니다.
localhost:letv congguangzi$ git rebase --continue
Applying: 1. modify the category layout
Recorded resolution for 'src/main/res/values/dimens.xml'.

3. 로컬 코드를 서버에 제출
코드를 동기화한 후 충분한 권한만 확보하면 서버에서 코드를 제출할 수 있습니다.
git push origin master:refs/for/dev_letv_global

여기서: origin 원격 웨어하우스 이름 refs/for/devletv_글로벌>devletv_글로벌 지점에서 > refs/for는 관리자의 검토를 기다리고 있음을 나타냅니다.커밋이 성공하면 git에서 다음과 같은 프롬프트를 표시합니다.
localhost:letv congguangzi$ git push origin master:refs/for/dev_letv_global
     Counting objects: 19, done.
     Delta compression using up to 8 threads.
     Compressing objects: 100% (16/16), done.
     Writing objects: 100% (19/19), 1.64 KiB | 0 bytes/s, done.
     Total 19 (delta 13), reused 0 (delta 0)
     remote: Resolving deltas: 100% (13/13)
     remote: Processing changes: new: 1, refs: 1, done    
     remote: 
     remote: New Changes:
     remote:   http://legit.letv.cn/13439
     remote: 
     To ssh://legit.letv.cn:29418/terminal/tv-letv-global
     * [new branch]      master -> refs/for/dev_letv_global

알림에는 제출 진도, 원격 지점에 대한 정보가 포함되어 있으며 관리자의 심사를 기다리고 있습니다.http://legit.letv.cn/13439는 이번에 제출한 URL입니다. 브라우저에서 이 URL을 열고 리뷰 코드를 추가하는 관리자나 다른 작업을 수행합니다.심사 과정에서 코드를 수정하고 다시 제출할 수 있는 심사입니다.코드는 로컬에서 수정 준비 단계를 수정한 후 다음을 수행합니다.
localhost:letv congguangzi$ git commit --amend
[master 9d0b2a3] 1. modify the category layout 2. add live content layout
Date: Thu Jul 21 11:25:05 2016 +0800
7 files changed, 93 insertions(+), 1 deletion(-)
create mode 100644 src/main/res/drawable/letv_category_other_title_bg.xml
create mode 100644 src/main/res/layout/letv_live_time_vs_content.xml
--amend 명령어 추가 제출,vim 편집기 시작,제출 주석 편집,vim 편집기 사용에 대한 군말 없이 구글 도모.편집이 끝난 후 종료를 저장하고 위의 그림과 같은 알림 정보를 얻습니다. 일반적인commit 명령과 유사하지만 추가로 제출한 파일만 추가되었습니다.이후의 조작은 이전과 대동소이하다. 서버fetch 코드,rebase 처리 충돌에서 다시push를 서버에 제출한다.심사가 통과된 후 이 부분의 코드가 입고되면 업데이트를 다시 제출할 수 없고 수정하려면 다음 제출에서만 수정할 수 있습니다.
4.git stash 적용
개발 과정에서 자주 이런 상황을 만날 수 있다. 한 번의 제출을 마친 후에 다음 작은 수요가 절반까지 개발되었다. 이때 맏형이 너에게 지난번 제출에 문제가 있어서 수정이 필요하다고 말했다.그러나 새로운 기능은 이미 절반을 썼기 때문에 제출할 수 없다. 어때?사실 여기에는 두 가지 방법이 있는데, 브랜치와stash, 여기서 비교적 간단한stash 방식을 말해 봅시다.
git stash

코드를 저장했음을 알립니다. 작업 공간은 clean 상태입니다. 이 때 서버fetch에서 코드를 수정한 다음 제출이 완료되면 실행합니다.
git stash pop

이 과정에서 원래의 코드와 충돌이 있을 수 있다. 충돌을 처리하는 과정은 서버fetch 코드에서 충돌을 처리하는 방식과 같고 충돌 처리가 완료되면 이전의 개발 임무를 계속할 수 있다.
5.checkout 적용
만약 당신이 Settings Fragment을 수정하고 있다면.java 같은 코드나 Settings Layout.xml 이 레이아웃 파일은 이때 갑자기 자신의 수정이 잘못되었다는 것을 발견하고 파일을 복원해야 한다. 첫 번째 반응은 ctrl+z 취소, 수정이다. 그러나 프로그래머로서 이렇게 하는 것은 확실히 너무 low적이다. 그리고 너무 많이 수정하면 취소 작업만으로 파일을 원래의 상태로 복원할 수 없다.이때git에서 제공하는 checkout 명령이 유용하게 사용됩니다.먼저 작업공간의 상태를 확인합니다.
git status
     On branch master
     Changes to be committed:
       (use "git reset HEAD ..." to unstage)

        modified:   src/main/res/layout/letv_settings_item.xml

     Changes not staged for commit:
       (use "git add ..." to update what will be committed)
       (use "git checkout -- ..." to discard changes in working directory)

        modified:   src/main/java/com/letv/tv/db/LetvDBHelper.java

여기에 두 개의 서류를 수정하여 그중의 하나를 잠시 저장하였다.git는 상당히 상세한 힌트를 주었습니다. 우리는 힌트에 따라 임시로 저장되지 않은 파일을 복원하고 실행git checkout src/main/java/com/letv/tv/db/LetvDBHelper.java,LetvDBHelper를 실행합니다.java는 이전 제출, 즉 수정 전의 상태로 회복됩니다.
이미 임시 저장된 파일에 대해 먼저 실행git reset HEAD src/main/res/layout/letv_settings_item.xml하고 파일 임시 저장을 취소한 다음에 실행git checkout src/main/res/layout/letv_settings_item.xml,letvsettings_item.xml 레이아웃 파일은 수정 전의 상태로 회복됩니다.작업공간을 다시 한 번 보려면 다음과 같이 하십시오.
git status
On branch master
nothing to commit, working directory clean

Adnroid Studio에서 코드를 확인하고 원래 상태로 복원합니다.nice.

좋은 웹페이지 즐겨찾기