zoukankan      html  css  js  c++  java
  • Git的基本使用

    Git的基本使用

    git bash操作

    0.git流程

    流程图
    上图包含常用6个命令

    专用名词译名

    • Workspace: 工作区
    • Index/Stage:暂存区
    • Repository:仓库区(或者本地仓库)
    • Remote:远程仓库

    1.git基本配置

    git config --list 可以查看已经配置的参数

     有三个级别的存储位置 --system 所有用户(本系统) --global 当前用户(全局) --local 本地配置(当前目录), 默认使用--local
    
    • 配置提交代码时的用户名和邮箱
       $ git config --global user.name 'name'
       $ git config --global user.email abc@qq.com
    

    2.创建git仓库

    • 初始化当前目录,创建git仓库(生成 .git 文件夹)

       $ git init
      
    • 新建一个目录,将其初始化为git仓库

       $ git init [dir-name]
      
    • 连接远程库

      $ git remote add `origin`  https://github.com/xiangbeiw/TIM.git
      

      使用上述命令时报错,说明本地已经关联了一个远程库,可以使用·git remote -v 查看当前关联所有远程库信息。

    • 删除已有的git远程库

      $ git remote rm `库名称`
      

    3. 获得git仓库

    如果需要克隆远程仓库可以使用git clone [url]
    
        $ git clone  https://github.com/xiangbeiw/TIM.git
    

    4.提交更新

    提交流程:

    先执行更新项目

    $ git pull origin master
    

    (有时第一次创建项目也需要执行更新,因为新建项目时有时候会自动添加readme文件)。多人合作时需要先更新项目,再写代码,避免冲突!
    接着先执行:

    $ git add 【要上传的文件夹名称】
    

    再执行:

    $ git commit -m "提交的描述"
    

    最后执行:

    $ git push origin master
    

    完成提交。

    git中每个文件都有三种状态:committed、staged、modified。

    我们获取的git仓库中的所有文件都是committed状态,如果你修改了本地文件a, a的状态就变成modified,如果使用git add a , a的状态就变成staged;如果使用git commit,a的状态就变成committed。

    还有一种文件状态,未跟踪状态(unversioned/untracked), 通过 git add 可以 把未跟踪状态变成staged;通过git rm可以将staged或者committed状态变成为跟踪状态。

    git status

    提交之前先检查下修改了什么内容,当前git目录下个文件的状态。

    $ git status
    On branch master
    Your branch is up to date with 'github/master'.
    
    nothing to commit, working tree clean
    

    刚提交过, 很clean...

    git add

    git add可以添加文件或者目录到暂存区,也可以使用通配符。比如:

    $ git add Readme.md    # add file only
    $ git add *.js         # add all js files
    $ git add /home/code/  # add all files in /home/code
    $ git add .            # add all files in /
    $ git add -p           # 对于同一个文件的多处变化,可以实现分次提交
    

    git diff

    git diff可以查看当前目录的所有修改。
    提交之前,还是单独确认下处于staged状态的文件有哪些,并保证修改正确。在实际应用中,可能还需要使用git diff导出PATCH做代码走读。
    可以使用git diff --staged或git diff --cached查看staged与上次提交快照之间的区别。

    git rm

    git rm会把文件从当前目录删除(不会保存删除的文件)。如果需要从Git仓库中删除,但保留在当前工作目录中,亦即从跟踪清单中删除,可以使用:

    $ git rm --cached readme.md
    

    git mv

    改名文件,并且将这个改名放入暂存区

    $ git mv [file-original] [file-renamed]
    

    git commit

    提交前需慎重。直接调用git commit会弹出编辑器,输入提交日志(如果是多行日志,建议使用)。
    针对单行日志提交的情况,可以使用如下命令:

    git commit -m "add readme"
    
    git commit -v #提交时显示所有diff信息
    
    # 使用一次新的commit,替代上一次提交
    # 如果代码没有任何新变化,则用来改写上一次commit的提交信息
    git commit --amend -m [message]
    
    
    # 重做上一次commit,并包括指定文件的新变化
    $ git commit --amend [file1] [file2] ...
    

    还有一种快捷的提交方式,直接跳过stage缓存区,直接提交当前目录下的所有修改git commit -a(使用这个命令前建议确认下当前目录的修改是否正确、必须)。

    5. 提交历史查看

    可以使用git log查看当前工程的所有提交的日志。

    $ git log --stat      # 仅显示摘要选项
    $ git log --pretty=oneline        # 定制记录格式
    $ git log --graph     # 图像化分支和版本更新
    
    # 显示当前分支的版本历史
    $ git log
    
    # 显示commit历史,以及每次commit发生变更的文件
    $ git log --stat
    
    # 搜索提交历史,根据关键词
    $ git log -S [keyword]
    
    # 显示某个commit之后的所有变动,每个commit占据一行
    $ git log [tag] HEAD --pretty=format:%s
    
    # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
    $ git log [tag] HEAD --grep feature
    
    # 显示某个文件的版本历史,包括文件改名
    $ git log --follow [file]
    $ git whatchanged [file]
    
    # 显示指定文件相关的每一次diff
    $ git log -p [file]
    
    # 显示过去5次提交
    $ git log -5 --pretty --oneline
    
    # 显示所有提交过的用户,按提交次数排序
    $ git shortlog -sn
    
    # 显示指定文件是什么人在什么时间修改过
    $ git blame [file]
    

    6. 撤销更新

    # 恢复暂存区的指定文件到工作区
    $ git checkout [file]
    
    # 恢复某个commit的指定文件到暂存区和工作区
    $ git checkout [commit] [file]
    
    # 恢复暂存区的所有文件到工作区
    $ git checkout .
    
    # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
    $ git reset [file]
    
    # 重置暂存区与工作区,与上一次commit保持一致
    $ git reset --hard
    
    # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
    $ git reset [commit]
    
    # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
    $ git reset --hard [commit]
    
    # 重置当前HEAD为指定commit,但保持暂存区和工作区不变
    $ git reset --keep [commit]
    
    # 新建一个commit,用来撤销指定commit
    # 后者的所有变化都将被前者抵消,并且应用到当前分支
    $ git revert [commit]
    
    # 暂时将未提交的变化移除,稍后再移入
    $ git stash
    $ git stash pop
    

    7. 远程仓库

    $ git remote update  --更新远程仓储
    # 下载远程仓库的所有变动
    $ git fetch [remote]
    
    # 显示所有远程仓库
    $ git remote -v
    
    # 显示某个远程仓库的信息
    $ git remote show [remote]
    
    # 增加一个新的远程仓库,并命名
    $ git remote add [shortname] [url]
    
    # 取回远程仓库的变化,并与本地分支合并
    $ git pull [remote] [branch]
    
    # 上传本地指定分支到远程仓库
    $ git push [remote] [branch]
    
    # 强行推送当前分支到远程仓库,即使有冲突
    $ git push [remote] --force
    
    # 推送所有分支到远程仓库
    $ git push [remote] --all
    

    可以使用git remote查看当前的远程库。
    git remote -v可以显示对应的克隆地址。(对于多个远程仓库很有用)

    添加远程仓库

    git remote add [short_name] [url]可以添加新的远程仓库。

    从远程仓库抓取数据

    $ git fetch [remote-name] #可以从远程仓库抓取数据到本地。
    #也可以使用`git pull`
    

    推送数据到远程仓库

    git push [remote_name] [branch_name]
    默认使用origin和master。

    查看远程仓库信息

    $ git remote show origin
    

    远程仓库的删除和重命名

    $ git remote rename [old_name] [new_name]
    $ git remote rm [remote_name]
    

    8. 打Tags

    可使用git tag显示当前库中的标签。

    # 列出所有tag
    $ git tag
    
    # 新建一个tag在当前commit
    $ git tag [tag]
    
    # 新建一个tag在指定commit
    $ git tag [tag] [commit]
    
    # 删除本地tag
    $ git tag -d [tag]
    
    # 删除远程tag
    $ git push origin :refs/tags/[tagName]
    
    # 查看tag信息
    $ git show [tag]
    
    # 提交指定tag
    $ git push [remote] [tag]
    
    # 提交所有tag
    $ git push [remote] --tags
    
    # 新建一个分支,指向某个tag
    $ git checkout -b [branch] [tag]
    

    添加标签(含附注)

    git tag -a v0.1 -m "my version 0.1"`
    使用如下命令查看Tag日志信息(指定对应标签的名字)
    `git show v0.1`
    也可使用SHA-1的提交表示创建tag:
    `git tag -a v0.2 [SHA-1] -m "my version 0.2"
    

    分享标签

    默认的,git push不会推送标签信息到远程仓库,需要通过命令显式推送。
    git push origin v0.1
    如果需要推送所有标签,使用
    git push origin --tags

    9. Git分支

    git分支是轻量级的,速度很快,仅记录索引信息。

    显示所有分支

    使用git branch可显示当前所有分支。

    # 列出所有本地分支
    $ git branch
    
    # 列出所有远程分支
    $ git branch -r
    
    # 列出所有本地分支和远程分支
    $ git branch -a
    

    可以使用--merged和--no-merged查看已经合并、未合并的分支。

    创建及切换分支

    可以使用下面命令直接切换并创建分支
    git checkout -b testing
    等价于

    $ git branch testing    # 创建testing 分支,但是仍停留在当前分支
    $ git checkout testing  # 切换到testing分支,并更新工作区
    
    # 新建一个分支,指向指定commit
    $ git branch [branch] [commit]
    
    # 新建一个分支,与指定的远程分支建立追踪关系
    $ git branch --track [branch] [remote-branch]
    
    # 切换到上一个分支
    $ git checkout -
    
    # 建立追踪关系,在现有分支与指定的远程分支之间
    $ git branch --set-upstream [branch] [remote-branch]
    

    注意切换分支时请保持工作目录没有未提交的修改。Git鼓励使用分支,处理完问题之后合并分支即可。

    分支合并

    将hotfix分支合并到master(主分支)上,需要通过下面命令:

    $ git checkout master
    $ git merge hotfix
    

    合并之后可以使用git branch -d hotfix删除分支。
    如果合并时存在冲突,需要手工修改。

    10.其他

    # 生成一个可供发布的压缩包
    $ git archive
    

    感谢

    上传操作

    随梦飞翔 https://www.cnblogs.com/smfx1314/p/8426115.html

    命令操作

    天才卧龙 https://www.cnblogs.com/chenwolong/p/GIT.html

    Tocy https://www.cnblogs.com/tocy/p/git-command-line-manual.html

  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/inc904/p/9742132.html
Copyright © 2011-2022 走看看