美文网首页
Git命令记录

Git命令记录

作者: 6plus | 来源:发表于2018-10-23 19:31 被阅读0次

    不同于熟知的SVN,CC等集中式的版本控制工具,Git是一款开源的分布式版本控制系统。

    基本概念

    工作拷贝(工作目录):用于存放产品开发数据本地工作目录

    索引(Index):用于存放待提交数据的缓存区

    本地库:远端库的一个完整的拷贝,包括所有文件的修改记录,分支等。

    远端库:本地库clone来源

    中心库:远端库的一种,公司级存放某个项目所有产品数据的仓库。

    快照(snapshot):版本库某个时间点所有文件集合

    全球版本号(commitID):Git库的版本号是通过SHA-1算法根据库中的所有内容计算出一个40位的哈希值,这个哈希值是全球唯一的,基本只要前六位就可以唯一标识了。

    4种文件状态

    Untracked files:未被跟踪的文件,此文件在文件夹中,但并没有加入到git库,一般指新添加的文件

    Change not staged for commit:已修改的文件,包括modified和deleted状态

    Change to be commit:已缓冲的文件,暂存状态,即已add的文件,执行git commit则将修改同步到库中,包括modified、deleted和new file状态

    Nothing to commit:已提交的文件,即已commit的文件

    Git基本操作

    Clone库

    #git clone 中心库名称地址 本地工作目录名称
    git clone https://github.com/9plus/9plus.github.io.git ~/
    

    增加、修改文件

    git add .        #处理目录下的所有修改和添加的文件,但是不处理删除的文件
    git add -A       #处理目录下的所有状态的文件
    git add -u       #处理目录下所有修改和删除操作,但不处理新增的文件
    
    git commit -m "提交信息"        #将缓存区的修改提交到本地版本库
    
    #保持change-id不变:通过git log可以找到对应提交的change-id
    git commit --amend      #重写上次提交的信息
    
    #实用情况
    git add file            #第一次
    git commit -m "test"
    git log             #得到上一次的change-id
    git commit --amend      #重写上次的change-id,第二次提交
    

    取消已缓存的修改

    git rm --cached 文件名     #将新添加的文件从缓冲区删除,不影响本地内容
    git reset HEAD 文件名      #此操作将修改的文件从缓冲区内删除,不影响本地内容
    

    删除文件

    git rm 文件名          #此操作只是删除文件并将删除的信息提交到缓冲区,使用git reset恢复
    

    remove后需要提交。

    rm -rf 文件名 + git add 文件名 = git rm 文件名
    

    同理还有git mv

    取消本地文件的修改,包括删除的文件

    git checkout 文件名    #此操作将取消尚未提交的本地文件已做的但未提交的修改
    git checkout .      #回退当前目录下所有的修改文件
    
    git clean -fd       #清除本地未被跟踪的所有文件
    

    比较文件差异

    git diff OldCommitId NewCommitId    #比较文件/目录下所有文件修改前后的不同,不加commitID则比较本地与缓存或者缓存与库中最新的
    git diff --cached           #index和远程库比较
    git diff HEAD/master                #工作区和head比较
    

    查看修改日志

    #git log
    git log --all --pretty=oneline --graph      #以树形显示日志的状态
    git log --name-only             #显示所有修改的文件名称
    git log --name-status                   #显示所有修改的文件名称和修改的状态
    git log --since 2012-11-10          #显示从2012/11/20至今修改过的日志
    git log -p                  #详细信息
    

    分支

    • 创建分支
    git branch 分支名 commitID         #基于某一个全球版本号拉出新分支
    git checkout -b 分支名 commitID            #创建并切换分支  没注明commitID则默认为当前的HEAD
    
    git checout -b=git branch + git checkout
    
    • 合并分支
    git merge 分支名               #将分支名指定的分支合并到当前所在的分支
    git cherry-picl commitID            #将某次特定提交合并到当前分支
    
    • 查看分支
    git branch
    
    • 检查分支是否合并到当前分支
    git branch --merged         #查看已经合并到当前分支的所有分支
    git branch --no-merged              #查看还没有合并到当前分支的所有分支
    
    • 删除私有分支
    git branch -d/-D 分支名
    

    注:-d删除分支前会检查分支中的内容是否都已经合并到其他分支,如果没有,则命令不执行

    -D不进行检查,直接删除分支

    • 重命名分支
    git branch -m oldbranch newbranch
    

    注:此操作是将"oldbranch"分支的名称改成"newbranch"。如果需要拉出分支,并同时切换到新分支可以用

    git checkout -b oldbranch newbranch
    

    上传

    git push 远端库名称 本地分支名称:远程分支名称
    

    注:此操作是将本地库的修改同步到中心库,如果本地分支的名称和远程分支的名称相同,则远程分支名称可省略。一般git push权限不对普通员工开放,普通员工需要提交代码使用repo upload

    更新当前代码(不推荐用git pull命令强制将更新合并到本地)

    git fetch 远端库名称     #获取远端库的更新到本地库
    git merge 远程库/分支名称      #将中心库的更新合并到本地工作目录中
    

    修改提交信息

    got commit -m '新的提交信息' --amend
    

    注:此操作只能修改最新的一次提交,之前的提交无法修改

    回退某一历史版本,然后提交到本地库

    git revert 全球版本库
    

    注:此操作将回退记录到历史的某一节点,并作为一次新的提交到库中

    回退

    git reset commitId      #需要重新提交,修改的内容保持不变
    git reset --har HEAD^       #回退到上个节点,修改的内容不保留
    

    暂存本地修改

    git stash
    git stash pop
    

    注:此操作是将本地未提交的修改暂存起来,并将文件状态恢复到HEAD,用pop即可恢复,非常适合临时插入的紧急bug修改

    git stash list          #查看本地的暂存的patchset
    

    查看全部提交

    git reflog          #可以找回任何提交记录,在没有删除git仓的情况下
    

    查看commit信息

    git show commitId       #展示本次修改的信息及内容
    

    解决冲突

    Hello
    <<<<<<<  HEAD
    12345
    =======
    world
    >>>>>>>  TEST_BR
    

    12345为当前分支上的内容,world为TEST_BR分支的内容

    忽略文件

    在git仓工作的根目录下创建.gitignore文件。如果将某个已经忽略的文件添加,使用

    git add -f 文件名
    

    忽略规则

    *.a     #忽略所有.a结尾的文件
    !lib.a      #lib.a除外
    /TODO       #仅仅忽略项目根目录下的TODO文件,不包括subdir/TODO
    build/      #忽略build/目录下的所有文件
    doc/*.txt       #忽略doc/notes.txt但是不包括/doc/server/arch.txt
    

    相关文章

      网友评论

          本文标题:Git命令记录

          本文链接:https://www.haomeiwen.com/subject/iarzaftx.html