说明
Git 提供了很多命令来完成相应的操作。在此记录一些常用的命令,方便以后查阅。
环境配置
当安装 Git 后首先要做的事情是设置用户名称和邮箱地址。这是非常重要的,因为每次 Git 提交都会使用该用户信息。
# 设置用户信息 git config --global user.name "shironekoa3" git config --global user.email "shironekoa3@qq.com"
# 查看用户信息 git config --list git config user.name git config user.email
|
通过上面的命令设置的信息会保存在 ~/.gitconfig
文件中。
获取Git仓库
要使用 Git 对代码进行版本控制,首先要获得 Git 仓库。
本地仓库
使用此命令来将当前目录初始化成本地 Git 仓库。
远程仓库
${url}
为远程仓库地址。
一些概念
版本库
Git 目录里面的 .git
隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息、文件版本等。
工作目录(工作区)
包含 .git
文件夹的目录就是工作目录,主要用于存放开发的代码。
暂存区
.git
文件夹中有很多文件,其中 index
文件就是暂存区,也可以叫做 stage
。暂存区是一个临时保存修改文件的地方。如果要提交某个文件,就必须先将文件添加到暂存区。
文件的两种状态
Git 工作目录下的文件存在两种状态:
- untracked:未跟踪(未被纳入版本控制)
- tracked:已跟踪(被纳入版本控制)
- Unmodified 未修改状态
- Modified 已修改状态
- Staged 已暂存状态
这些文件的状态会随着我们执行Git的命令而发生变化。
可以通过命令来查看文件的状态:
# 查看详细信息 git status # 查看简洁信息 git status -s
|
本地仓库操作命令
操作命令
# 将未跟踪文件添加到暂存区,文件变为已跟踪状态 git add hello.txt
# 将所有文件添加到暂存区 git add .
# 将暂存区文件取消暂存,文件变为未跟踪状态 git reset HEAD hello.txt
# 将暂存区文件提交到仓库 m:message git commit -m "init"
# 添加并提交可以合并 git commit -a -m "hello.txt"
# 删除文件。此方式会自动添加到暂存区。 git rm hello.txt
# 查看 Git 日志 git log
|
忽略列表
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志、临时文件等。在这种情况下,我们可以在工作目录中创建一个名为 .gitignore
的文件,列出要忽略的文件列表。下面是一个示例:
# 忽略所有 .a 结尾的文件 *.a
# 排除(不忽略) lib.a 文件 !lib.a
# 忽略 /TODO 这个文件 /TODO
# 忽略 build 目录下的所有文件 build/
# 忽略 doc 目录下的所有 .txt 结尾的文件,不包括子目录 doc/*.txt
# 忽略 doc 目录下的所有 .pdf 结尾的文件,包括子目录 doc/**/*.pdf
|
在 Windows 环境中,无法直接创建 .gitignore 文件,需要在 linux 命令行中用 touch 命令来创建。
远程仓库操作命令
查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行 git remote
命令。它会列出指定的每一个远程服务器的简写。如果已经克隆了远程仓库,那么至少应该能看到 origin
,这是 Git 克隆的仓库服务器的默认名字。
# 查看远程仓库 git remote
# 查看详细仓库 git remote -v git remote show origin
|
添加远程仓库
运行如下命令来添加一个新的远程 Git 仓库,同时指定一个可以引用的简写。
git remote add origin ${url}
|
一个本地仓库可以关联多个远程仓库。
克隆远程仓库
可以将所有内容从远程仓库克隆下来。
移除远程仓库
如果因为一些原因想要移除一个远程仓库,可以使用如下命令:
${name}
为远程仓库的名字,比如 origin
。
此命令只是从本地仓库移除远程仓库的关系记录,并不会影响到远程仓库。
从远程仓库拉取
git fetch
是从远程仓库获取最新版本到本地仓库,但是不会自动 merge
。
git pull
与 git fetch
作用相同,但是会自动 merge
。
# 拉取数据到本地仓库,不会自动合并到工作区 git fetch git fetch origin master
# 手动合并本地仓库和工作区的文件 git merge origin/master
# 拉取数据到本地仓库,并自动合并 git pull git pull origin master
|
如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错 (fatal: refusing to merge unrelated histories),解决此问题可以在 git pull 命令后加入参数 “–allow-unrelated-histories”。
推送到远程仓库
当你想分享你的代码时,可以将其推送到远程仓库。命令如下:
git push git push origin master
|
Git 分支
查看分支
# 查看本地分支 git branch
# 查看远程分支 (r: romate) git branch -r
# 查看所有本地分支和远程分支 git branch -a
|
创建&切换分支
# 创建分支 git branch ${branch-name}
# 切换分支 git checkout ${branch-name}
|
合并分支
在 master 分支下合并其他分支,命令如下:
如果遇到文件冲突,则需要手动修改冲突文件,然后使用 git add
命令来标识冲突已解决。
删除分支
# 删除分支 git branch -d ${branch-name}
# 强制删除分支 git branch -D ${branch-name}
# 删除远程分支 git push origin -d ${branch-name}
|
Git 标签
操作命令
# 查看所有标签 git tag
# 添加新的标签 git tag ${tag-name}
# 查看标签信息 git show ${tag-name}
# 推送到远程仓库 git push origin ${tag-name}
# 检出标签 git checkout -b ${branch-name} ${tag}
# 删除标签 git tag -d ${tag-name}
# 删除远程仓库标签 git push origin :refs/tags/${tag-name}
|
命令汇总
git config --global user.name "shironekoa3" git config --global user.email "shironekoa3@qq.com" git config --list git config user.name git config user.email git init git clone ${url} git status git status -s git add hello.txt git add . git reset HEAD hello.txt git commit -m "init" git commit -a -m "hello.txt" git rm hello.txt git log git remote git remote -v git remote show origin git remote add origin ${url} git clone ${url} git remote rm ${name} git fetch git fetch origin master git merge origin/master git pull git pull origin master git push git push origin master git branch git branch -r git branch -a git branch ${branch-name} git checkout ${branch-name} git merge ${branch-name} git branch -d ${branch-name} git branch -D ${branch-name} git push origin -d ${branch-name} git tag git tag ${tag-name} git show ${tag-name} git push origin ${tag-name} git checkout -b ${branch-name} ${tag} git tag -d ${tag-name} git push origin :refs/tags/${tag-name}
|