git 基本功
获取 git 仓库
- 普通目录转换为仓库
cd ... git init
- 获取现有的仓库
git clone git@gitee.com:argor/great.git
git clone git@gitee.com:argor/great.git mygreat
获取现有仓库时,可以为仓库设定新的目录名【默认为 great】:mygreat。
更新到仓库
- 检查当前库的文件状态
git status git status -s
- 添加新的跟踪文件
git add hello.txt git *
可以指定跟踪某个确定的文件,也可以一次性全部添加。
- 暂存修改的文件
git add hello.txt
已经暂存过的文件,在修改后需要再次暂存。
- 查看已暂存和未暂存的修改
git diff warning: LF will be replaced by CRLF in hello.txt. The file will have its original line endings in your working directory diff --git a/hello.txt b/hello.txt index b1a7984..8d0e412 100644 --- a/hello.txt +++ b/hello.txt @@ -1 +1 @@ -hello git. +hello git
暂存过文件 hello.txt 后重新修改,对比暂存后未暂存的文件差异【行末删除了英文句号】。
- 提交更新
git commit
跳过暂存,直接提交git commit -a
a 选项使本次提交包含了所有修改过的文件。
- 移除文件
# 同时移除文件清单和文件系统上的文件 git rm hello.txt # 暂存区文件,使用 -f 选项 git rm -f hello.txt # 仅在 git 仓库中移除,保留文件系统文件 git rm --cached hello.txt
- 移动文件
git mv hello.txt Hello.java # 在 git 下使用 mv 等同于如下一组命令的效果 mv hello.txt Hello.java git rm hello.txt git add Hello.java
查看提交历史
- 最近的提交会显示在最上边
git log git log --pretty=oneline
撤销操作
- 撤销操作是不可逆的。
- 撤销提交注释
# 撤销操作,会把暂存区重新提交。暂存区空,会修改 提交message。 git commit --amend
暂存区空时,等于修改了上次提交的注释信息。
-
取消暂存的文件
git reset HEAD hello.txt
- 撤销对文件的修改
git checkout hello.txt
hello.txt 还原到之前提交时的状态。
远程仓库的使用
- 查看远程仓库
$ git remote origin $ git remote -v origin git@gitee.com:argor/great.git (fetch) origin git@gitee.com:argor/great.git (push)
查看某个具体的远程仓库信息git remote show origin
- 从远程仓库中抓取&拉取
git fetch pb # 下载远程仓库所有的数据到本地仓库;
- 推送到远程仓库
git push origin master # 推送master 到 origin;
打标签
- Git 允许为仓库历史中的某一次提交打上标签
- 列出标签
$ git tag v1.0.0 v1.1.0 v1.2.0 v1.2.1 $ git tag -l *1 v1.2.1 # 使用通配符时,选项必选
- 创建标签
git 支持两种标签:轻量标签、附注标签*。 - 附注标签
$ git tag $ git tag -a v0.1 $ git tag v0.1 # tag命令的 a 选项用来创建附注标签。
查看标签信息$ git show v0.1 tag v0.1 Tagger: argor <15389222587@qq.com> Date: Fri May 7 20:26:33 2021 +0800 v0.1 commit bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) Author: argor <15389222587@qq.com> Date: Thu May 6 17:50:07 2021 +0800 commit diff --git a/hello.txt b/hello.txt new file mode 100644 index 0000000..8d0e412 --- /dev/null +++ b/hello.txt @@ -0,0 +1 @@ +hello git
- 轻量标签
无须选项,直接写标签名即可。$ git log --pretty=oneline bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) commit 3c0a9979b82aec0bbc23879b6a8dcf01ecf8fba1 lklj 4ff7a382f526fafd6b78a4d66663c039fb8e85c9 add Java code 5688fa6278a90163ea066dcb3fe22c268b922e25 (tag: v0.0.6) hello ab62d8c2fee1bc4560fec6df7d030606659fadad (origin/master, origin/HEAD, master) Initial commit argor donatello@argor MINGW64 /e/tmp/git/test/great (dev) $ git tag v0.0.8 4ff7a382f52 argor donatello@argor MINGW64 /e/tmp/git/test/great (dev) $ git log --pretty=oneline bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) commit 3c0a9979b82aec0bbc23879b6a8dcf01ecf8fba1 lklj 4ff7a382f526fafd6b78a4d66663c039fb8e85c9 (tag: v0.0.8) add Java code 5688fa6278a90163ea066dcb3fe22c268b922e25 (tag: v0.0.6) hello ab62d8c2fee1bc4560fec6df7d030606659fadad (origin/master, origin/HEAD, master) Initial commit
- 后期打标签
$ git log --pretty=oneline bb5156fe4dd9f3a8d3eed415f40716d4a3f8856b (HEAD -> dev, tag: v0.1) commit 3c0a9979b82aec0bbc23879b6a8dcf01ecf8fba1 lklj 4ff7a382f526fafd6b78a4d66663c039fb8e85c9 add Java code 5688fa6278a90163ea066dcb3fe22c268b922e25 hello ab62d8c2fee1bc4560fec6df7d030606659fadad (origin/master, origin/HEAD, master) Initial commit argor donatello@argor MINGW64 /e/tmp/git/test/great (dev) $ git tag -a v0.0.6 b922e25 fatal: Failed to resolve 'b922e25' as a valid ref. argor donatello@argor MINGW64 /e/tmp/git/test/great (dev) $ git tag -a v0.0.6 5688fa627 # 指定提交的校验和。 # 取首不取2尾。
- 共享标签
通过 git push 不会联通本地仓库的标签一起提交。
需要远程库也打上标签,必须显示推送。$ git push origin v0.0.6 # 允许一次传输多个标签,需要带上选项 $ git push origin --tags
虽然推送标签需要显示操作,获取却不需要。
- 删除标签
$ git tag -d v0.0.6 # 删除本地标签 $ git push origin --delete v0.0.6 # 删除远程库标签
- 检出标签
# 检出标签 $ git checkout # 通过 git status 可以查看当前标签信息。
Git 别名
- 为命令取别名,例如为 commit 取个别名:ci。
git 分支
分支简介
- 分支简介
git 每次提交的是文件的快照,既不是文件的变化也不是差异。
暂存(git add)操作会为文件计算校验和,然后保存文件的快照到 git 仓库。
提交(git commit)的时候,把计算的校验和提交到 git 仓库。 - 查看分支
查看都有哪些分支$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/lsj remotes/origin/master remotes/origin/rk
- 分支创建
$ git branch dev # 此时 Git 创建了一个指针。 # 创建分支,并不会切换分支。 # Git 中使用了一个特殊指针 HEAD,表示当前的本地分支。 $ git push --set-upstream origin dev # 通常分支的创建删除都是在本地库操作。
- 分支切换
切换分支,使用 checkout 命令。$ git checkout testing
Git 允许在不同分支间来回切换,独立工作,还可以进一步合并分支。(branch、checkout、commit)
Git 中创建一个分支的空间开销,41个字节(40个字符 & 一个换行符)。
Git 创建分支,合并分支,因为实现上仅仅是个指针,所以十分高效。
分支的新建与合并
- 分支创建与合并的例子解释
分支的创建、合并,步骤如下:
1.开发一个具体用户的项目;
2.为满足一个新的需求,创建一个分支;
3.开始新需求的实现;
开发过程中,出现了一个紧急事件。(项目运行时,常常消耗cpu到100%)
1.切换到出问题的分支;
2.创建新的分支,切过去;
3.修复她;
4.测试通过后,切回出问题原始分支,合并到出问题的分支; - 合并分支
# master 合并 dev。 git checkout master git merge dev
合并后删除分支git branch -d dev git push origin --delete dev # 通常分支的创建和删除都是在本地仓库进行。
- 遇到冲突时的分支合并
Gitee.com
git 命令行中文不显示
git config --global core.quotepath false export LESSCHARSET=utf-8
一切代码都是为了生活,一切生活都是调剂