常用Git命令和操作
这篇文章记录了本地单机使用Git时,经常用到的一些Git命令,以便查阅和参考。
下载、安装、配置
下载Git
下载并安装完成后,进入到项目文件夹,按右键,会出现Git的两个菜单:
选择Git Bash进入命令行界面,即可执行本篇文章后面的操作。
配置Git
#列出当前的配置 git config --list # 设置Git用户名 git config --global user.name "名字" # 设置Git邮箱 git config --global user.email "<your-email-address>" # 确保 Git 输出内容带有颜色标记 git config --global color.ui auto
配置编辑器
编辑器用于在commit时填写说明。
#Atom Editor 设置 git config --global core.editor "atom --wait" #Sublime Text 设置 git config --global core.editor "C:/Program Files/Sublime Text 2/sublime_text.exe' -n -w" #VSCode 设置 git config --global core.editor "code --wait"
创建Repository仓库
创建新仓库
git init
用于在当前文件夹下创建一个新的空仓库,位于.git隐藏文件夹中。
克隆现有仓库
git clone [url仓库地址] [仓库名称,可以不填,默认与现有仓库名称相同]
默认地将创建一个与被克隆的仓库名称相同的目录。
查看当前仓库的状态
git status
查看仓库历史记录
git log命令
git log
显示当前仓库的变更状态。有时候log会包含大量的信息,可以滚屏显示:
向下滚动
- j 或 ↓ 一次向下移动一行
- d 按照一半的屏幕幅面移动
- f 按照整个屏幕幅面移动
向上滚动
- k 或 ↑ 一次向上移动一行
- u 按照一半的屏幕幅面移动
- b 按照整个屏幕幅面移动
- 按下 q 可以退出日志(返回普通的命令提示符)
默认情况下,将会显示每个commit的:SHA、作者、日期、注释。
简化git log的显示
git log --oneline
在同一行中,并只显示SHA和注释。
查看具体修改了哪些文件
git log --stat
- 显示被修改的文件
- 显示添加/删除的行数
- 显示一个摘要,其中包含修改/删除的总文件数和总行数
查看文件修改的内容
git log --patch git log -p
使用此命令将会显示文件修改,同时会显示大量信息。
查看指定commit修改的文件内容
有两个命令都可以实现这个操作。
git log -p [SHA前7位] git show [SHA前7位] #git log -p fsa51d
向仓库提交Commit
git add命令
用于将文件从工作目录(Working Directory)提交到暂存区(Staging Index)。
# 加入指定文件 git add [filename1] [filename2] # 加入所有文件 git add .
git commit命令
用于将暂存区中的文件提交到库中。
直接使用git commit命令,会弹出git config中配置的编辑器,需要写入commit的注释。
使用 git commit -m "注释内容"
则不会弹出编辑器,一步完成,更快捷一些。
git diff命令
git diff 显示你已经保存,但是尚未移交至暂存区(当然也没有commit) 的更改。
忽略文件
如果想将目录下的某些文件忽略掉,不提交到库中,可以创建.gitignore文件,然后将文件名写入。
.gitignore文件支持通配符:
- # - 将行标记为注释
- * - 与 0 个或多个字符匹配
- ? - 与 1 个字符匹配
- [abc] - 与 a、b 或 c 匹配
标签、分支和合并
git tag命令
# 显示当前的所有标签 git tag
# 创建带注释的标签 git tag -a [version]
选项-a表示创建一个带注释的标签,它通常包含如下信息:
- 标签创建者
- 标签创建日期
- 标签消息
建议使用此种方式。如果不提供选项-a,即 git tag [version]
,则会创建一个轻量级的标签。
# 删除标签 git tag -d [version] #向之前的某次提交添加标签 git tag -a [version] [a87984]
git branch命令
显示分支
注意上图,有一个head指针,head指针标明了当前工作目录所在的分支,也叫活跃分支。
# 查看现在的所有分支 git branch
假设有两条分支branch1、branch2,则结果可能如下所示:
branch1 * master branch2
注意*号表示当前head指针所在的分支。
创建新分支
git branch [branchname]
创建新的分支后,活跃指针依然会位于当前分支,而不会位于新分支。
如果想要切换到新的分支,则需要使用git checkout命令:
git checkout [branchname]
如果要在创建新分支后,立即切换到新分支,可以加入-b选项:
git checkout -b [newbranch]
如果想使新分支的起点位置与basebranch一致,可以使用下面的命令:
git checkout -b [newbranch] [basebranch]
git log默认显示当前所在分支的日志,如果想要显示所有分支的日志,可以使用下面的命令:
git log --oneline --graph --all
删除分支
git branch -d [branchname]
- 不能删除当前分支,需要先checkout到其他分支后才能删除该分支。
- 如果分支上有其他分支都不包含的commit(分支从未合并过),则也不能删除。 因此该命令是安全的。
如果要强制删除某一分支(会丢失未合并的commit),使用大写的D选项。
合并分支
分支合并:将其他分支合并到当前(检出的)分支上。我们不是将两个分支合并到一个新的分支上。也不是将当前分支合并到其他分支上。
git merge [branchname]
合并冲突
合并时可能出现冲突,即两个分支修改了同一位置,此时,编辑冲突的文件,然后再重新合并。
撤销更改
更改最后一次commit
git commit --amend
这里分为了两种情况:
1、如果你的工作目录没有内容(也就是仓库中没有任何未 commit 的更改),那么运行 git commit --amend 将使你能够重新编辑 commit 消息。代码编辑器将打开,并显示原始 commit 消息。只需要重新编写注释即可。
2、如果你刚commit之后,又发现了一个相同的问题要修改,此时虽然可以连续commit,但是commit的说明可能都是一样的,它们本身应当属于同一个commit,而不是多个。此时,可以使用这个命令,它将会将多次commit合为同一个commit(相当于修改最后一次commit)。
还原commit
还原会执行和commit完全相反的操作。它会撤销目标commit所做的更改,并且创建一个新的commit记录这一更改。
git revert [commit-sha]
重置commit
假设有一个文件修改后提交到了暂存区,但是还没有commit,则可以使用下面的命令还进行还原:
# 将文件撤出暂存区 git reset [filename] # 还原文件(覆盖当前修改) git checkout [filename]
引用之前的某次commit
可以使用HEAD^和HEAD~来引用之前的某次commit
引用父级Commit: HEAD^ HEAD~ 祖父Commit HEAD^^ HEAD~2
还有一个需要特别注意的引用,^2。当commit位于两个分支合后的位置时,^引用第一个父(运行git merge时所处的分支),而^2引用第二个父,也就是被合并的分支。
git reset 用来清除commmit,根据选项的不同,清除后的commit有三个去处:
- --mix 将丢弃的commit放入工作目录
- --soft 将丢弃的commit放入暂存区
- --hard 彻底丢弃
假设刚刚合并完一个分支,则下面的命令可以撤销合并分支:
git reset --hard HEAD^
简单介绍到这里了,还需要多实践,多练习才能够更好的掌握,但是应付大多数情况应该没有什么问题了。
感谢阅读,希望这篇文章能给你带来帮助!