Git简要笔记

安装

简易使用

  • 版本相关

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 初始化版本
    git init # 里面生成一个.git文件夹,里面内容不要动

    # 更新修改到缓存区
    git add 文件名

    # 提交修改
    git commit -m "版本修改提示信息"

    # 查看版本历史
    git log
    git log --pretty=oneline # 参数用于提高阅读

    # 查看历史所有命令
    git reflog

    # 回退版本到上一个
    git reset --hard HEAD^
    git reset --hard HEAD~n # 回退到前n个版本
    git reset --hard 指定得版本号

    # git是先将修改提交到git得暂存区中,等待用户提交后再将修改提交到远程分支中
    # 查看版本库得状态
    git status
  • 文件修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 撤销【工作区】文件修改(前提:文件修改未提交到远程仓库)
    # 自修改后还没有被放到暂存区,执行撤销修改就回到和版本库一模一样的状态;
    # 修改已经添加到暂存区后,又作了修改,此时执行撤销修改就回到添加到暂存区后的状态。
    git checkout -- 文件名称

    # 撤销【缓存区】文件修改(前提:文件修改未提交到远程仓库,仅提交到缓存区)
    git reset HEAD 文件名称

    # 查看工作区与最新版本中文件的区别
    git diff HEAD -- [文件名]

    # 删除版本库文件
    git rm 文件名
    git commit -m "删除文件的描述信息"
  • 远程仓库(github)

    1. 本地执行如下命令,在用户home目录下的.ssh文件夹中生成id_rsa.pub公钥文件

      1
      ssh-keygen -t rsa -C "2467827751@qq.com"
    2. 进入github账户:【setting】–>【SSH and GPG key】,将id_rsa.pub文件内容添加到ssh中

    3. 进入github创建新仓库:【new repository】–>输入【Repository name】–>【Create repository】

    4. 在本地git仓库执行如下命令关联github对应的仓库

      1
      2
      3
      # 执行该命令是将本地仓与github仓库进行关联
      # origin给远程仓库起的别名,之后同步只需要用origin就可以了
      git remote add origin git@github.com:[自己的github用户名]/[项目名].git
    5. 提交本地仓库到github中

      1
      2
      3
      4
      5
      # 分支指提交到仓库的版本,一般为master; origin是第四步设定的远程仓库的别名
      git push -u origin master
      # 第一次提交需要加-u,表示将本地的master和远程仓库的master关联起来,之后提交就不需要要

      git push origin master
    6. 将github上的仓库clone到本地

      1
      git clone git@github.com:[giuthub用户名]/[项目名].git
  • 分支管理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    # 创建分支并切换至分支内部
    方式1:git checkout -b [分支名称] # 不推荐
    方式2:git switch -c [分支名称]
    # 上面的语句等价于
    gitbook branch [分支名称]
    git checkout [分支名称]

    # 查看当前仓库的所有分支, 当前分支前会标识*,所有的提交修改都是针对当前分支,不会影响其它分支
    git branch

    # 分支修改完毕,切换回指定分支
    方式1:git checkout [分支名称] # 不推荐
    方式2:git switch [分支名称]

    # 将指定分支合并到当前分支,这种有时会直接将master指向dev的最新位置【fast forward】
    git merge [指定分支名称]

    # 不采用【fast forward】,重新采用一个版本
    git merge --no-ff dev -m "合并版本的信息"

    # 同样也可以通过git rebase进行合并
    git rebase master

    # 删除分支名称
    git branch -d [分支名称]

    # 多个分支进行合并时,如果都有不同的版本,则需要手动更新后提交
    # 查看版本合并情况
    git log --graph --pretty=oneline --abbrev-commit

    # 强行删除未合并的分支
    git branch -D [分支号]
  • Bug管理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 保存dev环境的内容
    git stash

    # 查看保存的工作现场
    git stash list

    # 恢复之前的工作现场
    git stash pop # 恢复工作现场后,将保存的环境删除
    git stash apply && git stash drop # 和上面一句达到的效果一致

    # 复制一个特定的提交到当前的分支
    git cherry-pick [分支号]
  • 多人协作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # 查看远程库信息
    git remote

    # 查看远程库详细信息
    git remote -v

    # 推送分支
    # master分支一般是主分支,dev一般为开发分支。主分支一般由leader管理,dev分支由开发者开发使用
    git push origin [分支名称]

    # 抓取分支,clone下来以后,本地也只能看到本地的master分支
    git clone git@github.com:[用户名]/[项目名称].git

    # clone项目下来以后在本地创建dev分支,然后用户就可以在本地dev分支上开始修改
    git checkout -b dev origin/dev

    # 当其它用户的提交与我提交的产生冲突时,此时git push报错
    # 利用git pull将最新的提交从origin/dev抓下来,然后在本地进行合并后再推送
    git pull

    # 第一次git pull时会报错,需要将本地dev分支与远程origin/dev进行关联
    git branch --set-upstream-to=origin/dev dev

    # 将origin/dev远程提交与本地提交的版本信息简化为一条直线,使得查看更为简介
    git rebase
  • 标签

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    # 打标签相当于给版本号起别名,打标签时需要进入对应的分支中
    git tag 标签值

    # 给指定的版本号打标签
    git tag 标签值 版本号

    # 查看所有的标签
    git tag

    # 查看指定标签对应的版本信息
    git show 标签值

    # 创建带有说明的标签
    git tag -a 标签值 -m "标签对应的描述信息" 版本值

    # 删除本地的标签
    git tag -d 标签值

    # 推送指定标签到远程origin
    git push origin 标签值

    # 一次性将本地所有未推送的标签推送到远程
    git push origin --tags

    # 删除origin的标签值
    git tag -d 标签值
    git push origin :refs/tags/标签值
  • 自定义忽略文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 在工作区目录下新建文件【.gitignore】

    # 忽略文件的原则是:
    # 1. 忽略操作系统自动生成的文件,比如缩略图等;
    # 2. 忽略编译生成的中间文件、可执行文件等
    # 3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini

    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build

    # My configurations:
    db.ini
    deploy_key_rsa
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 在.gitignore中存在的文件强行提交
    git add -f 文件名

    # 检查添加的文件是否在忽视文件中
    git check-ignore -v 文件名

    # 配置命令的别名
    # 配置的别名位于【.git/config】文件中的【alias】下,如果取消单个别名,则删除该行即可
    git config --global alias 别名 "完整的命令名"
  • 搭建自定义git服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 安装
    sudo apt install git -y

    # 添加git用户
    sudo adduser git

    # 本地创建远程免密登录的密钥,然后将公钥传递到远程服务器.ssh文件夹下,命名为authorized_keys
    ssh-keygen -t rsa

    # 创建空仓库
    sudo git init --bare simple.git

    # 配置git用户的登录方式,为了安全
    sudo usermod -s /usr/bin/git-ssh git

    # 将服务器项目clone到本地
    git clone [用户名]@[服务器ip]:[仓库路径]

    # 之后就可以在本地进行推送了

问题汇总

.gitignore文件不生效

  • 原因

    因为git中新建文件会有缓存,并且如果之前的文件已经被纳入了版本管理中后,则修改.gitignore文件是不起效果的

  • 解决方案

    清除git本地缓存,然后重新提交

  • 源码记录

    1
    2
    3
    4
    git rm --cached .
    git add .
    git commit -m "update .gitignore"
    git push -u origin master

总结

为了提供实践方式,有人开发了一个demo用户学习:https://learngitbranching.js.org/?locale=zh_CN

该项目所在的github:https://github.com/pcottle/learnGitBranching

上述内容总结为脑图:脑图

Git