Git 操作总结

基础操作

  • git init:将文件目录转为 git 仓库
  • git add <filename>:将文件存入暂存区
  • git push:将修改同步到远端仓库
  • git pull:将远端仓库的新修改同步到本地
  • git diff <filename>:查看工作区的修改了哪些内容,没有 add 的文件是不在 diff 的作用范围的。
  • git commit -m <msg>:将暂存区的内容提交到仓库,commit 后会得到干净工作区。
  • git status:查看工作区的状态
  • git log [--graph]:查看记录
  • git tag:查看标签

Git 结构说明

  1. 工作区 工作区可以理解为咱们存放自己代码的文件目录。
  2. 版本库 工作区中含有一个隐藏的目录 .git , 这个就是 Git 的版本哭。里面有很多东西,我们的 Git 中的很多历史信息都是存在这里,版本回溯也是靠着里面的信息做到的。
  3. 暂存区 暂存区,可以理解为我们从工作区将代码移入“分支”前的中转站,在这里我们可以进行一些检查工作。

忽略特殊文件

Mac 下有 .DS_Store,运行 python 有 .pyc文件,make 有很多中间生成的文件,这些都是我们不想上传到仓库的文件,.gitignore 就是让我们配置哪些文件不用上传的位置。

  1. 配置方式 其实就是将不想上传的文件放在里面就好了,可以使用一些正则语法如*[]等等。同时 Github 为我们准备了一些常用的忽略列表可以直接使用。
    1
    2
    3
    4
     # Mac
     .DS_Store
     # Python
     *.py[cod]
    
  2. 强制添加文件 git add -f <file_name>:强制添加忽略规则内的文件。
  3. 查看文件为什么没有添加 git check-ignore -v <file_name>:会输出到底是哪个规则忽略了这个文件。

版本回退

  • git log/reflog:查看当前位置之前/之后的 commit
  • git reset --hard HEAD^/<commitID>:回退到上一步 / 某一个 commit 的状态
  • git checkout -- <filename>:退回到 commitadd 时的状态。这个指令也可以恢复删掉的文件注:如果没有 -- 就成了切换分支指令了
  • git reset HEAD <filename>:回退到提交之前最新的状态

标签管理

  • git tag <tag_name>:打开一个标签
  • git tag:查看所有标签
  • git tag -a <tag_name> -m <description> <commit_id>:tag 是针对 commit 的,也就是说这次 commit 出现的分支上都可以看到这个标签。
  • git show <tag_name>:查看 tag 的详细信息。
  • git push origin <tag_name>:将 tag 推送到远程服务器,tag 不会自动推送到远程
  • git tag -d <tag_name>:本地删除 tag
  • git push origin :refs/tags/<tag_name>:本地删除后,让远程仓库端也删除标签

远程仓库

首先要注意的是,远程仓库和本地的仓库是不同的仓库,这个概念在心里要有。

  • git remote -v:查看有哪些远程仓库,-v 是更加详细显示。
  • git remote add <name> <git_url>:同远程仓库关联,一般 nameorigin
  • git push -u origin master:第一次提交会将本地master 分支和远程的 master 分支关联起来。
  • git branch --set-upstream-to=origin/<branch_name> <local_branch_name>:当不能从远程仓库 pull 的时候,根据提示设置本地分支和远程分支的链接。
  • git rebase:正常 merge 后,git log --graph 展现的会出现分叉,有的人觉得这样子对比不直观,不想有这些分叉,于是就出现了这个 rebase

分支管理

这里要注意的是,我们对 git 仓库的操作可以想象是我们操作的是在操作一个链表上的指针

  • git branch -a:查看当前仓库有什么分支。
  • git checkout -b <new_branch_name>:新建一个分支,相当于 git branch <new_branch_name> 之后再 git checkout <new_branch_name>
  • git checkout <branch_name>:切换分支。注意的是,切换前需要把当前分支的所有改动 commit 到仓库中,否则会输出提示。
  • git merge [--no-ff -m "msg"] <branch_name>:将别的分支合并到当前分支。默认时 Fast forward 模式,也就是说这种模式下删除分支后会丢掉分支信息,--no-ff 取消了Fast forward
  • git branch -d/D <branch_name>:删除/强制删除某个分支

Git 开发分支思路

  • master:应该非常稳定,仅用来发布新版本,平时不在上面进行操作,需要关联到远程仓库
  • dev:这个是真正干活的地方,大家维护自己的分支,之后合并到 dev 上,需要关联到远程仓库
  • bug:bug 修复分支,如果没有合作开发就不关联到远程仓库。
  • Feature:新的功能开发,如果没有合作开发就不关联到远程仓库

Github 的其他使用说明

  1. 合作开发:一般而言,我们不具有别人仓库的修改权限,所以我们要是想参与开源项目的话,需要有以下几个步骤:
    • Fork 别人的仓库:这时候我们就有一个能修改的仓库了。
    • pull request:当你修改了一个 bug 或者开发了一个新 feature 以后,可以通过pull request 告知仓库所有者,看对方是否接受你的 pull request
  2. 别名 有些指令很长,我们不希望每次都要手动输入,解决这个问题的方式就是使用别名。当然这种别名设置在 zshrc 中也可以。
    1. .gitconfig 文件中的 [alias] 下设置
      1
      2
      3
       # in ~/.gitconfig
       [alias]
         lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ci) %C(bold blue) <%an>%Creset' --abbrev-commit
      
    2. 直接使用命令行 使用 git config --global alias.<alias_cmd> <cmd> 来设置别名
      1
       git config --global alias.ci commit
      
  3. 搭建 Git 服务器 除了使用 Github 官方的服务器外,我们还可以自己搭建自己的 Git 服务器,搭建的方法教程链接为这里

参考资料

  • 本文作者: Author:DeamoV
  • Github:https://github.com/Duan-JM
  • Email:vincent.duan95@outlook.com
  • 本文链接: Artical: Git 操作总结
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 版权声明: 原创文章如转载,请注明出处