Git 操作指南

git常用命令笔记

基础配置

配置远程仓库的ssh key

在本机创建ssh key

# 运行后按enter使用默认值
ssh-keygen -t rsa -C "自己的邮箱地址"

获取ssh key的公钥

cat ~/.ssh/id_rsa.pub

复制上面命令显示的公钥,到远程仓库的ssh key里。请完整拷贝从ssh-到你的用户名和主机名为止的内容。

.gitignore

项目根目录新建.gitignore文件,并把不想用git跟踪的文件写进去。如果你在.gitignore里写某个文件之前已经commit并push上去了,可以参考下面删除信息那一节的内容。

查看信息

查看历史commit信息

查看历史commit注释和commit_id

git log

查看某个文件历史commit信息

查看指定文件所有历史commit信息

git log -p -- <file-path>

每次提交中具体修改了哪些文件

git log --name-status -- <file-path>

每次提交中简要信息

git log --oneline -- <file-path>

查看当前的状态

git status

查看文件修改

# 查看这个文件的修改记录,默认显示整个文件
git blame <filename>

# 可以通过参数 -L <start>,<end>来检查需要修改的某几行
git blame <filename> -L 10,50 //查看第10~50行的修改记录

查看两个版本之间改动细节

git diff <commit-id-1>  <commit-id-2>

查看两个版本之间改动文件列表名,不展示细节

git diff --name-status <commit-id-1>  <commit-id-2>

Git 对比两个版本间某一个文件的变化

# 先列出两个版本间发生更改的文件列表
git diff <commit-id-1>  <commit-id-2> --stat --name-only

# 查看指定文件在两个版本间发生的变更
git diff <commit-id-1>  <commit-id-2> -- <filename>

# 更直观地查看
git difftool <commit-id-1>  <commit-id-2> -- <filename>

查看可引用的历史版本记录

git log命令是显示当前的HEAD和它的祖先,递归是沿着当前指针的父亲,父亲的父亲,……,这样的原则。

使用git reflog命令,可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引,所以该命令被命名为reflog,即:引用日志。

git reflog

添加信息

最简单最常用的命令

# 添加某个文件的更改
git add filepath

# 添加所有更改,注意是否配置好.gitignore,否则会把原本不想用git管理的文件也添加进去
git add --all

git commit -m '这里写commit注释'

git commit -am '添加所有更改并提交注释'

git push # 如果设置了远程仓库的话

删除信息

当文件未使用git add缓存时

使用git checkout —filepath,注意中间有—,否则就成了切换分支了。

git checkout --filepath

如果要放弃所有文件的修改,可以使用下面的命令。此命令用来放弃所有没加入缓存区的修改(内容修改与整个文件删除),需要注意的是,不会删除刚新建的文件,因为刚新建的文件还没有加入到git的管理系统中,所以对git是未知的。

git checkout .

已使用git add缓存代码,未使用git commit

使用git reset HEAD filepath

git reset HEAD filepath

如果要放弃所有文件的修改,就不要后面的文件路径了。此命令用来清除git对于文件修改的缓存,相当于撤销了git add 命令的工作。使用本命令后,本地的修改不会消失,而是回到了未使用git add 缓存代码时的状态。如果要继续删除修改,则使用git checkout —filepath的方法。

git reset HEAD

已经用git commit 提交了代码

回退到上一次commit的状态

git reset --hard HEAD^

回退到任意版本,使用git log查看提交历史和对应的commit_id

git reset --hard <commit-id>

在使用.gitignore文件后如何删除远程仓库中以前上传的此类文件而保留本地文件

在使用git和github的时候,如果之前没有写.gitignore文件,上传了一些没必要的文件,后来在添加了.gitignore文件后,想要删除远程仓库里的这些文件同时保留本地的文件。这时不能直接用”git rm directory”,因为这样会删除本地仓库的文件。

可以这样做

git rm -r --cached directory
git commit -m 'update'
git push

分支

查看现有分支

git branch

新建分支

git branch <new-branch>

新建分支并切换到该分支

# 默认的git checkout -b命令会从当前所在的HEAD指针所指的分支来派生出新建的分支
git checkout -b <new-branch>

# 从指定的existing-branch分支派生创建了一个名为new-branch的新分支。
git checkout -b <new-branch> <existing-branch>

切换分支

git checkout <branchname>

切换远程分支

# 为了能够checkout出某一个远程仓库的分支,我们需要先fetch那个仓库的内容。
git fetch --all
# 像checkout本地分支一样checkout出这个远程分支(需要用较新版本的git)
git checkout <remotebranch>

新建本地分支,切换分支并且拉取远程分支的最新commit

git checkout -b <branchname> <origin/branchname>

新建本地分支并重置为远程分支的最新commit

git checkout -b <branchname>
git reset --hard origin/<branchname>

删除本地分支

git branch -d <branchname>

强制删除本地未合并分支

git branch -D <branchname>

删除远程分支

git push origin --delete <branchname>

推送本地分支到远程分支

git push origin <branchname>
// 推送到远程仓库的不同分支
git push origin <local_branch_name>:<remote_branch_name>

文件比对

查看本地文件修改

git diff

比对本地分支与远程分支

git fetch origin master
git diff origin/master master

贮藏/储藏

贮藏更改

我们可以通过以下命令贮藏更改的文件,暂时保存工作目录中的修改,并将其存储在一个临时位置,以便稍后再次恢复。

git stash [save "贮藏描述"] [-u]
  • <font style="color:rgb(25, 27, 31);background-color:rgb(248, 248, 250);">save "贮藏描述"</font>(可选):指定贮藏文件的描述。
  • <font style="color:rgb(25, 27, 31);background-color:rgb(248, 248, 250);">-u</font>(可选):指定贮藏包括未跟踪文件的更改。

查看贮藏列表

,这个命令将显示所有贮藏的详细信息,包括每个贮藏的唯一标识符、贮藏时的提交信息以及可能提供的描述。。

git stash list

删除所有贮藏

我们可以通过以下命令删除所有贮藏,执行此命令将清除所有当前存储的贮藏,因此请确保您不再需要这些贮藏中的任何更改。

git stash clear

删除指定贮藏

我们可以通过以下命令删除指定的贮藏,通过提供<font style="color:rgb(25, 27, 31);background-color:rgb(248, 248, 250);"><stash标识符></font>,您可以精确地指定要删除的贮藏,而不会影响其他贮藏的状态。

git stash drop <stash标识符>
  • <font style="color:rgb(25, 27, 31);background-color:rgb(248, 248, 250);"><stash标识符></font>(必须):指定需要删除的贮藏标识符。

应用贮藏

我们可以通过以下命令应用贮藏,该命令可以帮助你恢复之前贮藏的更改,而不会删除贮藏记录。

git stash apply <stash标识符>
  • <font style="color:rgb(25, 27, 31);background-color:rgb(248, 248, 250);"><stash标识符></font>(可选):指定需要应用的贮藏标识符,如果不指定则应用最近一次贮藏。

应用后删除贮藏

我们可以通过以下命令应用后删除贮藏,该命令可以帮助你恢复之前贮藏的更改,并在应用后立即删除贮藏记录。

git stash pop <stash标识符>
  • <font style="color:rgb(25, 27, 31);background-color:rgb(248, 248, 250);"><stash标识符></font>(可选):指定需要应用的贮藏标识符,如果不指定则应用最近一次贮藏。

参考资料

Git - Book (git-scm.com)