Git-Logo

引言

在之前浅尝辄止地学习过一段时间的 Git ,在日常的项目中也没有使用 Git 进行版本管理,最近趁着放假系统性学习了一下 Git ,下面是学习过程中记录的一些 Git 常用命令以及一些常用配置,供日后学习和实践当中使用,不当之处,敬请指出。

Git 最小配置

安装之后需要进行的最小配置,配置用户的用户名和邮箱,每一个 Git 提交都会使用这些信息,它们会写入到你的每一次代码提交中。

# 配置用户名和邮件地址

# 某账号下所有的 Git 仓库都有效
git config --global user.name 'your name'
git config --global user.email 'your email'

# 只对当前仓库有效
git config --locl user.name 'your name'
git config --local user.email 'your email'

查看 Git 的配置

# 查看所有配置信息
git config --list

# 查看不同类型(local/global)的配置项
git config --list --local
git config --list --globbal

清除 Git 的配置

# 清除 global 类型的配置项
git config --unset --global 某个配置项

# 清楚某个仓库的配置项
git config --unset --local 某个配置项

本地基本操作

  • 初始化Git仓库

    git init

该命令将创建一个名为 .git 的子目录,这个子目录含有初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,项目里的文件还没有被跟踪。

如果在一个已存在文件的文件夹(而非空文件夹)中进行版本控制,应该开始追踪这些文件并进行初始提交。 可以通过 git add 命令来指定所需的文件来进行追踪,然后执行 git commit

git add *.c
git add LICENSE
git commit -m 'initial project version'
  • 克隆已有的仓库

    git clone <url>

使用 git clone 命令会在创建一个项目目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果你进入到这个新建的项目文件夹,你会发现所有的项目文件已经在里面了,准备就绪等待后续的开发和使用。

  • 查看变更情况

    git status
  • 查看当前工作在哪个分支上

    git branch -v
  • 切换到指定分支

    git checkout 指定分支
  • 把当前目录及其子目录下所有变更都加入到暂存区

    git add .
  • 把仓库内所有变更都加入到暂存区

    git add -A
  • 创建正式的 commit

    git commit
  • 比较某文件工作区和暂存区的差异

    git diff 某文件
  • 比较某文件暂存区和 HEAD 的差异

    git diff --cached 某文件
  • 比较工作区和暂存区的所有差异

    git diff
  • 比较暂存区和 HEAD 的所有差异

    git diff --cached
  • 把工作区指定文件恢复成和暂存区一样

    git checkout 文件1 文件2 文件3
  • 把暂存区指定文件恢复成和 HEAD 一样

    git reset 文件1 文件2 文件3
  • 把暂存区和工作区所有文件恢复成和 HEAD 一样

    git reset --hard
  • 用 difftool 比较任意两个 commit 的差异

    git difftool 提交A 提交B  
  • 查看哪些文件没被 Git 管控

    git ls-files --others

加塞临时任务的处理

  • 把未处理完的变更先保存到 stash 中

    git stash
  • 临时任务处理完后继续完成之前的工作

    git stash pop

或者

git stash apply

pop 不保留 stash,apply保留 stash

  • 查看所有 stash

    git stash list
  • 取回某次 stash 的变更

    git stash pop stash@{数字n}

修改个人分支的历史

  • 修改最后一次 commit

    1)在工作区修改文件
    2)git add .
    3)git commit --amend
  • 修改中间的 commit (代号 X )

    1)git rebase -i X前面一个commit的id
    2)在工作区修改文件
    3)git add .
    4)git rebase --continue
    后续可能需要处理冲突,直到 rebase 结束

查看变更的历史

  • 当前分支各个 commit 用一行显示

    git log --oneline
  • 显示最近的 n 个commit

    git log -n
  • 用图示显示所有分支的历史

    git log --oneline --graph --all
  • 查看涉及到某文件变更的所有 commit

    git log 某文件
  • 某文件各行最后修改对应的 commit 以及作者

    git blame 某文件

分支与标签

  • 基于当前分支创建新分支

    git branch 新分支
  • 基于指定分支创建新分支

    git branch 新分支 已有分支 
  • 基于某个 commit 创建新分支

    git branch 新分支 某个commit的id
  • 创建分支并切换到该分支

    git checkout -b 新分支
  • 列出本地分支

    git branch -v
  • 列出本地和远端分支

    git branch -v
  • 列出远端所有分支

    git branch -rv
  • 列出名称符合某样式的远端分支

    git branch -rv -l '某样式'
  • 安全删除本地某分支

    git branch -d 拟删除分支
  • 强制删除本地某分支

    git branch -D 拟删除分支
  • 删除已合并到 master 分支的所有本地分支

    git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d
  • 删除远端 origin 已不存在的所有本地分支

    git remote prune origin
  • 给 commit 打标签

    git remote prune origin

两分支间的集成

  • 把A分支合入到当前分支,且为 merge 创建 commit

    git merge A分支
  • 把A分支合入到B分支,且为 merge 创建 commit

    git merge A分支 B分支
  • 把当前分支基于B分支做 rebase,以便把B分支合入到当前分支

    git rebase B分支
  • 把A分支基于B分支做 rebase,以便把B分支合入到A分支

    git rebase B分支 A分支
  • 用 mergetool 解决冲突

    git mergetool

Git 和 Github 的简单同步

配置公私钥

ssh-keygen -t rsa -b 4096 -C "your email"

使用该命令后连续按三次回车,即可在~/.ssh文件夹生成一对公私钥文件,其中id_rsa为私钥,id_rsa.pub为公钥。

复制id_rsa.pub里的内容到 Github 个人设置页面,选择SSH and GPG keys选项卡,添加上述的公钥内容即可。

和远端的交互

  • 列出所有的 remote

    git remote -v
  • 增加 remote

    git remote add url地址
  • 删除 remote

    git remote remove remote的名称
  • 改变 remote 的 name

    git remote rename 旧名称 新名称
  • 把远端所有分支和标签的变更都拉到本地

    git fetch remote
  • 把远端分支的变更拉到本地,且 merge 到本地分支

    git pull remote名称 分支名
  • 把本地分支 push 到远端

    git push remote名称 分支名
  • 删除远端分支

    git push remote --delete 远端分支名 
    或者
    git push remote :远端分支名
  • 向远端提交指定标签

    git push remote 标签名
  • 向远端提交所有标签

    git push remote --tags

Git 集成使用禁忌

以下命令会对分支造成严重破坏,请不要在工作中使用以下命令

  1. 禁止向集成分支执行 push -f 操作
  2. 禁止向集成分支执行变更历史 (rebase) 的操作

参考资料

Last modification:January 20th, 2021 at 03:58 am