Git、GitHub项目常用操作命令指南

  • Git常用命令介绍
    • 仓库初始化及基本操作
    • 版本回退
    • 克隆
    • 分支管理
    • 多人协作

Git 常用命令操作教程 [附Git中文官方操作指南]

  • 强烈建议
    建议大家亲手查看Git中文官方操作指南,还有 PDF 和 电子书 可以下载!

  • 主要用途
    团队合作和版本控制

  • 安装
    window 系统直接从Git官网下载安装程序
    使用 Git 获取升级:
    $ git clone git://git.kernel.org/pub/scm/git/git.git

  • 常用命令

    • git init 初始化文件夹,出现隐藏文件夹 .git
    • git add <files> 将更改的文件添加到待提交的状态
    • git commit -m 'xxx' 提交被修改过的文件到仓库 给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
    • git status 获取当前 repository 的状态(是否有修改等)
    • git diff 查看工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
    • git diff --cached 查看已暂存的将要添加到下次提交里的内容(已暂存和已提交的不同)
    • git log -p -2 查看提交记录、commit id 以便在版本回退时使用, -p 显示每次提交差异 -2 最近两次提交 git log -pretty=oneline 简化输出信息
    • git relog 记录每次提交的命令,可以通过这个记录回到最新的版本
    • 版本回退
      • git reset --hard HEAD^

        参数:HEAD^ 上个版本,HEAD^^ 上上个版本,前N个版本 HEAD~N
        如果因为误操作或者其他原因需要再次回到最新版本,则需要 commit id 上场了:git reset --hard commit_id
        根据 git log 或者 git reflog 得到的 commit id 在不同版本间切换

    • git diff HEAD -- 文件名 查看当前工作区和版本库中的 某文件 有什么不同
    • git checkout -- file 撤销修改,回到最近一次 commit 或者 add 时的状态
    • git reset HEAD file 将暂存区的修改回退到工作区
    • git rm file 删除文件
    • …Or create a new repository on the command line

      echo "# gittest" >> README.md  
      git init  
      git add README.md  
      git commit -m "first commit"  
      git remote add origin git@github.com:youraccount/yourprojectname.git  
      (如果出现错误 fatal: remote origin already exists , 则 git remote rm origin 再执行上条命令)
      git push -u origin master  
      
      参数说明:-u :由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支  
               内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送  
               或者拉取时就可以简化命令,使用 git push origin master 即可。  
               master: 推送 master 分支
      
    • …Or push an existing repository from the command line

      git remote add origin git@github.com:youraccount/yourprojectname.git
      git push -u origin master  
      
    • 克隆仓库

      $ git clone git@github.com:jerryhanjj/gittest.git
      Cloning into 'gittest'...
      remote: Counting objects: 3, done.
      remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
      Receiving objects: 100% (3/3), done.  
      
* **分支管理****[一个很神奇的东西]**  
    * 创建分支名 `git branch 分支名`
    * 切换分支   `git checkout 分支名`
    * 一步到位(创建并切换) `git checkout -b 分支名` 
    * 合并分支 `git merge 分支名` 如果遇到合并冲突,需要手动解决
        * `$ git merge --no-ff -m "提交信息" 分支名` 禁用 `Fast forward` 合并模式,可以保留历史分支信息  
    * 删除分支 `git branch -d 分支名`,若该分支未被合并则报错,`-D` 强制删除
    * `git branch `  
        * `-v` 最后一次提交信息
        * `-vv` 这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
        * `--merged` 已被合并的分支(可以删除)
        * `--no-merged` 未被合并分支
    * `$ git log --graph --pretty=oneline --abbrev-commit` 查看分支合并图  

            $ git log --graph --pretty=oneline --abbrev-commit
            *   916eac9 (HEAD -> master) merge dev with no-ff
            |\
            | * 1a1f2f3 change pro on dev
            |/
            * ff89d5e fz
            * a146f81 (origin/master, origin/HEAD) add pro.md
            * bfca575 remove project.md
            * 0e79ea5 project.md
            * 4ce4618 project.md
            * ec0e6db first commit
* **多人协作**
    * 创建 dev 等分支进行开发
    * 把 dev 分支 push 到远程(GitHub) dev 分支上。如果推送失败,出现 冲突 先用git pull把最新的提交从 dev 抓下来,然后,在本地合并,解决冲突,再推送。
    * 再由 dev 推到 master 主分支上
0%