一、获取 Git 仓库
获取git仓库有两种方式,第一种,自己本地新建仓库,第二种克隆别人仓库。
1.本机创建仓库
(1)在某个空文件下右键选择"Git Bash Here"
(2)输入"git init"实现仓库创建
2.拉取远程仓库
(1)空文件夹下 git clone https://gitee.com/tab343/api-gateway.git mygit (mygit自定义本地仓库名称)
二、查看文件状态
查看文件状态之前必须了解git中文件有哪些状态->
2.1使用git status命令可查看git中文件状态
上图中文件状态以及所在区域依次为
Changes to be committed: 表示文件等待提交
3.txt(绿色)已追踪,但还未提交到暂存区域。(使用命令:git add 3.txt)
Changes not staged for commit: 表示文件有变更且未提交到暂存区域。
1.txt/3.txt 已追踪,且已修改,但未提交到暂存区域
*:这里的文件一定是已追踪的,但是不能判断该文件是否提交过。如上图,1.txt文件我有过提交到暂存区域的操作,而3.txt从未提交到暂存区域。
Untracked files: 未追踪的文件
4.txt 未追踪
*:此时如果直接删除4.txt文件,git不会做任何记录。
2.2-s 参数状态简览
git status -s 参数展示文件简洁信息
状态码解释
左状态码 |
右状态码 |
含义 |
? |
? |
两个问号表示,文件未添加到git仓库(还未追踪)。 |
A |
A表示git仓库新增文件(即已追踪) M表示已修改 |
|
M |
文件被修改且提交到暂存区域(修改文件后,使用git add添加到暂存区) |
|
M |
表示已经添加到过暂存区域,且文件被修改但未提交到暂存区域 |
三、忽略文件
在.git目录下新建.gitignore文件。
需要注意的是忽略规则.
- 所有空行或者以
#
开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(
/
)开头防止递归。 - 匹配模式可以以(
/
)结尾指定目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!
)取反。
忽略模版:A collection of .gitignore templates
以下为用idea创建新目录时候生成的.gitignore文件。
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
.......................略.......................
四、查看已暂存和未暂存的修改
4.1使用git diff 比较工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容。
4.2使用git diff --cached/staged 查看已暂存的将要添加到下次提交里的内容
五、提交更新
5.1使用git commit -m '提交说明' 命令,将暂存区域文件提交仓库。已修改但未暂存的文件不会提交。
5.2 -a 参数,表明将追踪过的文件提交仓库
六、移除文件
6.1 使用git rm -f 4.txt 从版本控制中删除,下次提交则不会纳入版本管理。-f为强制删除。
6.2使用git rm --cached 4.txt 从暂存区域中删除,但保留工作空间文件。
6.3使用git mv 4.txt 44.txt
7.查看提交历史
7.1使用git log查看提交日志
8.撤销
8.1撤销前一个操作后,添加一些操作后提交,git commit --amend。
8.2取消暂存 git reset 7.txt
8.3撤销对文件的修改 git checkout -- 7.txt
上面操作实际上是检出最开始的7.txt文件然后覆盖工作空间的7.txt
9.git远程仓库使用
9.1查看远程仓库 git remote -v
9.2为本地仓库添加远程仓库路径 git remote add pb https://github.com/paulboone/ticgit
其中pb为该仓库的简称,默认名称为orgin
9.3从远程仓库抓取与拉取
使用git fetch [remote-name]实现远程仓库的拉取,但是此操作不会合并或修改你当前的工作,需手动合并。
使用git pull [remote-name]可实现自动合并到当前分支
使用git clone [remote-name]默认实现master分支与远程master分支合并
9.4推送到远程分支
使用git push [remote-name] [branch-name] 实现推送到远程仓库的某个分支
9.5查看远程分支
git remote show origin
9.6远程仓库重命名
git remote rename pb paul
9.7远程仓库删除
git remote rm paul
10git打标签
有利于交流
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
Git有commit,为什么还要引入tag?
“请把上周一的那个版本打包发布,commit号是6a5819e...”
“一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是v1.2”
“好的,按照tag v1.2查找commit就行!”
所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
11git别名
简化操作 git config --global alias.co checkout
12git分支
参考:Git-分支-分支简介
12.1创建分支
git branch testing
12.2切换分支
git checkout testing
注意:切换分支会改变工作空间目录结构
12.3项目分叉历史
当我们在两个分支上都进行提交操作后,就会出现项目分叉。
git log --oneline --decorate --graph --all
12.4Git分支合并
参考:Git分支合并
情景案例
让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤:
- 开发某个网站。
- 为实现某个新的需求,创建一个分支。
- 在这个分支上开展工作。
正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理:
- 切换到你的线上分支(production branch)。
- 为这个紧急任务新建一个分支,并在其中修复它。
- 在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
- 切换回你最初工作的分支上,继续工作。
(1)创建一个新需求分支: git checkout -b iss53 = git branch iss53 + git checkout iss53
需要解决bug
(2)切换到master分支,注意在你切换分支之前,保持好一个干净的状态,避免冲突。
git checkout master
git checkout -b hotfix #新建一个修复问题分支,修复完成后git commit提交
(3)合并master分支与hotfix分支
git checkout master #首先切回到master分支
git merge hotfix #合并分支
(4)删除hotfix分支,因为它与master分支指向同一个位置
git branch -d hotfix
(5)继续开发新功能,完成后合并到master分支
git merge iss53
(6)合并出现冲突
12.5GIT远程分支
参考:Git-分支-远程分支
推送分支: git push (remote) (branch)
$git push origin master
跟踪分支: git checkout -b myBranchName [branch] [remotename]/[branch]
等价于 git checkout --track origin/master
拉取分支: git pull origin branch = git fetch + git merge
删除分支: git push origin --delete serverfix