Git知识点记录3-Git基础
1.设置全局的用户名和邮箱属性
git config --global user.name "Tom"
git config --global user.email "Tom@163.com"
设置文本编辑器
git config --global core.editor "'E:\Program Files (x86)\EditPlus\EditPlus\EditPlus\EditPlus.exe'"
2.查看配置信息
git config --list
查看某个属性值: git config <属性值>
3.获取帮助
git help <verb>
git <verb> --help
man git-<verb>
4.获取git仓库
4.1.初始化git仓库:
git init
4.2.克隆git仓库
git clone <url>
5.查看当前文件处于的状态
git status
如果你使用 git status -s 命令或 git status --short 命令,你将得到一种格式更为紧凑的输出。
6.跟踪新文件或将已跟踪文件修改后, 放入暂存区
git add ... -> 将指定文件添加到暂存区
git add * -> 所有文件添加到暂存区
7.查看已暂存和未暂存的修改
git diff -> 此命令比较的是工作目录中当前文件和暂存区域快照之间的差异
git diff --staged | git diff --cached -> 这条命令将比对已暂存文件与最后一次提交的文件差异
git difftool -> 调用 emerge 或 vimdiff 等软件(包括商业软件)输出 diff 的分析结果, 比较工作目录中当前文件和暂存区域快照之间的差异
git difftool --cached(staged) -> 调用 emerge 或 vimdiff 等软件(包括商业软件)输出 diff 的分析结果, 比较已暂存文件与最后一次提交的文件差异
8.提交更新
git commit
git commit -m "提交信息说明" -> 将提交信息与提交命令放在同一行
git commit -a -> Git 就会自动把所有已经跟踪过的文件暂存起来一并提交, 从而跳过 git add
git commit -a -m "xxx" -> 不需要先执行git add添加文件到暂存区, 直接提交和添加暂存一起执行
9.移除文件
git rm -> 从已跟踪文件清单中移除(确切地说,是从暂存区域移除), 并连带从工作目录中删除指定的文件
git rm -f -> 如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f(译注:即 force 的首字母)
git rm --cached xxx -> 想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中
git rm log/\*.log -> 列出文件或者目录的名字, 此命令删除 log/ 目录下扩展名为 .log 的所有文件
git rm \*~ -> 该命令会删除所有名字以 ~ 结尾的文件。
10.移动文件
git mv file_from file_to -> 要在 Git 中对文件改名
11.查看提交历史 和 限制输出长度
git log -> 按时间先后顺序列出所有的提交,最近的更新排在最上面
git log --patch | git log -p -> 会显示每次提交所引入的差异
git log -n -> 只显示最近的n次提交
git log --stat -> 显示每次提交的简略统计信息(文件修改统计信息)
git log pretty=oneline(short|full|fuller) -> 可以使用不同于默认格式的方式展示提交历史, =选项不同详尽程度不一
git log pretty=format:"%h ..." -> 定制记录的显示格式, ""中的内容就是格式, 具体百度
git log --since=2.weeks -> 列出最近两周的所有提交
git log --since(after) -> 仅显示指定时间之后的提交
git log --until(before) -> 仅显示指定时间之前的提交
git log --author -> 仅显示作者匹配指定字符串的提交
git log --committer -> 仅显示提交者匹配指定字符串的提交
git log --grep -> 仅显示提交说明中包含指定字符串的提交
git log -S -> 仅显示添加或删除内容匹配指定字符串的提交
12.撤消操作
git commit --amend -> 如果上次提交以来未做任何修改(例如,在上次提交后马上执行了此命令),快照会保持不变,而修改的只是提交信息
示例1: 本次提交之后发现提交信息写错了, 执行命令: git commit --amend, 前提是提交之后没做任何修改
示例2: 本次提交之后发现有文件漏了暂存并提交, 执行如下命令:
git add ** -> 先暂存文件
git commit --amend -> 可以改也可以不该提交信息, 然后保存即可, 此文件就在之前的提交中了, 而且没有多余的其他提交记录
13.取消暂存或工作空间的文件
示例1: 修改了两个被追踪的文件, 执行了git add * 暂存了两个文件, 但是想分别作为两个独立的文件进行两次提交, 如何取消其中一个文件的暂存呢?
其实git status命令就已经给出了提示:
git status之后会发现有一个提示命令: use "git restore --staged <file>..." to unstage
所以执行命令: git restore --staged <file>... 就可以取消暂存, 回到未暂存的状态
示例2: 修改了文件, 但是还没有暂存, 不想保留想要撤回修改, 将它还原成上次提交时的样子
其实git status 也已经给出了提示
git status之后会发现提示命令: use "git restore <file>..." to discard changes in working directory
所以执行命令: git restore <file> 就可以撤销修改了
14.查看远程仓库
git remote -> 如果想查看已经配置的远程仓库服务器可执行此命令, 会列出你指定的每一个远程服务器的简写,如果已经克隆了仓库,那么至少应该能看到 origin(Git给克隆的仓库服务器的默认名字)
git remote -v -> 会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL
15.添加远程仓库
git clone 命令可以自行添加远程仓库的, 但是这里是自己来添加, 命令:git remote add <shortname> <url> 添加一个新的远程 Git 仓库,同时指定简写(类似origin)
示例1: git remote add demo-git https://github.com/Tome/git/demo-git.git
现在你可以在命令行中使用字符串 demo-git 来代替整个 URL。如果你想拉取仓库中有但你没有的信息,可以运行 git fetch demo-git
16.从远程仓库中抓取与拉取
git fetch <remote> -> 从远程仓库中获得数据,会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看
如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。 所以,git fetch origin 会抓取克隆(或上一次抓取)
后新推送的所有工作。 必须注意 git fetch 命令只会将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
17.推送到远程仓库
git push <remote> <branch> -> 分享你的项目时,必须将其推送到上游。
git push origin master -> 只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效, 否则被拒绝, 必须先拉取他人的推送合并
18.查看某个远程仓库
git remote show <remote> -> 查看某一个远程仓库的更多信息, 会列出远程仓库的 URL 与跟踪分支的信息,它告诉你正处于什么分支
git remote show origin -> 查看远程仓库origin的信息
19.远程仓库的重命名与移除
git remote rename oldname newname -> 修改一个远程仓库的简写名
git remote rename demo-git git -> 将之前远程仓库名的简写从demo-git改为git
git remote remove demo-git 或 git remote rm demo-git -> 想要移除一个远程仓库demo-git
20.打标签
20.1.列出标签
git tag (可带上可选的 -l 选项 --list) -> 在 Git 中列出已有的标签
git tag -l "v1.8.5*" -> 只查询1.8.5系列的标签(按照通配符列出标签需要 -l 或 --list 选项)
20.2.创建标签
Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)
①轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。
②而附注标签是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息
,并且可以使用 GNU Privacy Guard (GPG)签名并验证。 通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签
,或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
附注标签:
git tag -a v1.4 -m "my version 1.4" -> -m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会启动编辑器要求你输入信息。
git show 命令可以看到标签信息和与之对应的提交信息
轻量标签:
不需要使用 -a、-s 或 -m 选项,只需要提供标签名字
git tag v1.4
git show 命令可以看到标签信息和与之对应的提交信息
20.3.后期打标签:
也可以对过去的提交打标签。要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和, git log可以查询):
例如: git tag -a v1.2 9fceb02
git show 可以查看
20.4.共享标签:
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。在创建完标签后你必须显式地推送标签到共享服务器上。
git push origin <tagname> -> 推送某个标签
git push origin --tags -> 要一次性推送很多标签
20.5.删除标签
git tag -d <tagname> -> 删除掉你本地仓库上的标签, 并不会从任何远程仓库中移除这个标签
git push <remote> :refs/tags/<tagname> -> 从任何远程仓库中移除这个标签, 含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它
git push origin --delete <tagname> -> 更直观的删除远程标签的方式
20.6.检出标签
git checkout
21.Git别名
可以通过 gitconfig 文件来轻松地为每一个命令设置一个别名, 如下:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
意味着,当要输入 git commit 时,只需要输入 git ci
22.stash
git stash -> 将当前分支的工作隐藏起来, 就可以已切换分支了
git stash list -> 查看当前隐藏的工作
恢复stash:
①.git stash apply -> 恢复, 回复之后还需要使用命令git stash drop来删除
②.git stash pop -> 恢复的同时把stash内容也删除了
23.拉取
git pull
如果失败:
git branch --set-upstream-to=dgit/<branch> test -> 绑定远程test和本地分支<branch>, 然后就可以pull了
24.查看分支
git branch
25.分支创建
git branch <name> -> 创建分支, 指定名字
26.分支切换
git checkout <name> -> 切换到name的分支
27.创建新分支的同时切换过去
git checkout -b <newbranchname>
28.删除分支
git branch -d <name> -> 删除本地分支
git push dgit -d <name> -> 删除远程分支
29.分支的新建与合并
git merge <branchname> -> 将branchname的分支合并到当前分支
30.遇到冲突时的分支合并
如果你想使用图形化工具来解决冲突,你可以运行 git mergetool
31.分支管理
git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表
git branch -v -> 查看每一个分支的最后一次提交
32.远程分支
git remote show <remote> -> 获得远程分支的更多信息
33.推送分支
git branch <name> -> 先创建
git push dgit <name> -> 推送