关闭

git使用详解

2764人阅读 评论(0) 收藏 举报

    git是一个免费、开源的分布式版本控制系统,可以高效的对大/小项目进行版本管理。工作了一段时间,踩了一些坑以后才发现,使用git对代码和版本进行控制真的是十分必要的。本文总结了git的基础知识和常用的命令,具体内容分为如下:

    一、 git基础知识。

    二、git配置文件。

    三、git本地工作目录操作。

    四、git远程仓库。

    五、git标签。

    六、git分支

    七、git diff管理


一、git基础知识

    Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:

                                                                              
                                                              
                                                         

二、git配置文件

     1.  git配置文件位置:
           针对所有用户:  /etc/gitconfig
           针对当前用户: ~/.gitconfig
     2.  查看配置的方法:
           git config --list
     3. 修改配置的方法:
           git config --global user.name "username"
           git config --system  user.email "useremail"
           git remote origin set-url "url"
     4. 配置让git忽略某些文件:
           可以使用.gitignore文件(gitignore文件的通配和正则类似)
               gitignore文件示例:
                   4.1:   fd1/*                          ---忽略目录fd1下的全部内容,会递归忽略
                   4.2:
                           /*
                           !.gitignore
                           !/fw/bin/
                           !/fw/sf/                        ---忽略除.gitignore、fw/bin、fw/sf以外的所有文件

三、git本地工作目录操作

    1. git 中文件的各个状态:

              unstaged  - git 仓库中没有此文件的相关记录
              modified   - git仓库中有这个文件的记录,并且此文件有改动
              staged      - git仓库追加、删除的文件被暂时保存,且这些追加删除并未提交到git仓库
              commited - git追加或修改的文件被比较到本地仓库(git仓库中大部分是这种文件,所以git status并不显示这种文件)

     2. git clone现有仓库:

              git clone url (URL支持 git, ssh, http, https等多种协议)

     3. git 查看仓库中各文件状态:  

              git status

     4.  git 初始化一个仓库
              git init
     5.  git追加文件
              git  add test.c
              此时有如下两种选择可选:
                  a. git reset HEAD  test.c                                                          ---状态变回modified,恢复本地仓库中的test.c文件
                  b. git  commit -m "my message"                                              ---比较文件到仓库
              git commit -m "my message"
     6.   删除文件
              git rm test.c
              git rm --cache test.c                                                                     ---git仓库
              此时如果做如下操作:
                   git commit -m 'rm test.c'                                                          ---git仓库以后不再维护test.c,但当前目录仍有test.c
     7. 误删除后的回复:
              git log (查看各次的提交信息)
              git  checkout commi号 (恢复到之前的commit号的版本)
              git  checkout master(备份好删除文件后,再恢复到最新的状态)
                                         

四、git远程仓库

        1. git查看远程仓库
               1.1  简单查看远程---所有仓库
                        git remote  (只能查看远程仓库的名字)
                1.2 查看更多内容---所有仓库
                        git  remote  -v (远程仓库的名字及git地址)
                1.3 查看单个仓库
                        git  remote show [remote-branch-name]
        2. 新建远程仓库:
                git remote add [branchname]  [url]
        3. 修改远程仓库:
                git remote rename [oldname] [newname]
        4. 删除远程仓库:
                git remote rm [remote-name]
        5. 获取远程仓库 
                5.1 获取数据
                      git fetch [remote-name] (获取仓库所有更新,但不自动合并当前分支)
                      git pull (获取仓库所有更新,并自动合并到当前分支)
                5.2 上传数据
                      git push [remote-name] [branch]
                      .eg  git push origin master
        6. 新建远程分支
                 git checkout [local branch]
                 git remote add [remote_repo] [remote_branch]
                 6.1 向远程分支推送数据
                         git push remote_repo remote_branch                            ---推送数据到远程分支
                         git push remote_repo: remote_branch                           ---删除远程分支

五、git 标签

        1.列出标签
             1.1  查看所有tag
                   git tag
             1.2 查看某个tag
                   git show [tag-name] 
        2. 新建tag
             2.1 轻量级tag
                   git tag [tag-name]
             2.2 带标注的tag
                   git  tag -a [tag-name] -m "tag message"
             2.3 后期追加tag
                   git log --pretty=online (查看所有commit号)
                   git tag -a [tag-name] [commit前几位即可]
         3. 删除标签
              git tag -d [tag-name]
         4. 提交标签到远程仓库
              git push [remote-name] --tags
              ex. git push origin --tags 

六、git分支

        1. 查看和切换分支
               git branch                                         --- 查看所有分支及当前处于哪个分支
               git branch -v/-a                                     --- 查看所有分支的详细信息
               git branch --merged                          --- 查看已经合并的分支
               git branch --no-merged                     ---查看还没有合并的分支
               git checkout [branch-name]              --- 切换到某个分支
        2. 新建分支
               git branch [branch-name]                 --- 新建分支
               git branch -b [branch-name]             --- 新建分支并切换到该分支
        3. 合并分支
               git merge [branch-name]
               .eg 将分支btest合并到主分支上
               git checkout master
               git merge btest
        4. 删除分支
               git branch -d/-D  [branch-name]

七、git diff 查看文件修改

           1. git log dir/file 查看当前文件夹/文件的修改

               git log -p -n 1  查看最近一次修改的详细 


        2.

       
                                            

八、其他常用git场景:

        1. 撤销本地commit:

        2. 放弃本地所有修改,包括commit和未提交的内容:

                  git fetch origin niepengyu

                  git reset --hard origin/niepengyu

        3. 代码合并:

                  git revert commitnum    — 撤销commitnum的修改,并产生一条撤销的commit记录

                  git reset --hard              — 相当于git的HEAD变了,文件也变了。如果有文件修改未track会直接丢弃修改

                  git reset --soft               — 相当于git的HEAD回退了,但是把文件修改放在缓存区

                  git reset --mixed            —相当于git的HEAD变了,文件改变了,但文件并未在缓存区

                  HEAD ~n                       ---最近的n次

                  HEAD ^n                        —第n次

                  例如有三个commit,它们的commit顺序分别为

                         commit3

                         commit2

                         commit1

                  下面运行:

                        git revert HEAD 回退commit3,并产生revert commit2的记录。

                        git revert HEAD ~1 回退commit2,并产生revert commit2的记录。

                        git reset --hard HEAD ~1 撤销commit3,直接回退到commit2结束。

                        git reset --soft HEAD ~1  撤销commit3,把修改存储在暂存区

                        git reset --mixed HEAD ~1 撤销commit3,修改并未存储在暂存区 

                  git rebase/merge

                         当master和mywork各自向前有多个commit以后,这时master和mywork就存在分叉了。这时如果想在mywork分支上把master分支的提交和mywork的分支合并可以使用如下命令,先把本地commit取消,并把它们临时保存为布丁,存放到.git/rebase中。

然后把mywork分支更新为最新的master分支后,再把保存的布丁应用到mywork分支上。git merge与git rebase产生的commit顺序不同。

                          git checkout mywork

                          git rebase master

                  git stash/ git stash pop

                          git stash 把当前目录和index的所有修改压入一个栈,并保留一个clean的工作状态,即处于上一次最新提交处。

                          git stash list 会显示这个栈list

                          git stash apply: 取出stash list中的上一个项目。也可以git stash apply stash@{1}


                          git stash drop:删除上一个,也可以指定参数删除一个项目

                          git stash clear: 删除所有项目

        4. git merge:

                  git merge origin test  ---把test branch的修改合并到当前分支

        5. git 删除branch恢复:

                   慎重删除分支,一旦删除只能通过其他分支或者本地记录的commit号修复分支了。

        6. git fetch与pull的区别:

              git fetch相当于从远程获取并merge到本地。git pull仅相当于从远程的origin的master分支上下载到origin/master上。
        7. git cherry-pick 提取某个commit号到其他的branch:

git checkout new_branch
                git cherry-pick commit-id

九、正确的开发流程:

         1. 基于staging/online分支,创建自己的开发分支。

         2. 基于自己的开发分支修改,并提交。

         3. 开发测试。

         4.  提交merge request。 提交到online版本,发布。




参考文献:
2. 图文详解Git的使用场景:http://www.cnblogs.com/wang_yb/p/3867221.html
3. git 详解之git基础:  http://www.open-open.com/lib/view/open1328069733264.html
4. git log常用命令及详解:http://www.cnblogs.com/BeginMan/p/3577553.html


2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:186763次
    • 积分:3816
    • 等级:
    • 排名:第8832名
    • 原创:147篇
    • 转载:87篇
    • 译文:0篇
    • 评论:24条
    最新评论