1.基础概念
1.1 工作空间:
1.1.1 工作区:存放 未跟踪/跟踪修改/删除 文件,git add 作用区域:git status为红
1.1.2 暂存区:存放工作区中的 暂存跟踪/暂存修改/暂存删除 文件,git commit作用区域:git status为绿
1.1.3 本地仓库:通过git commit作用后的区域:文件状态正常
1.1.4 远程仓库:通过git push之后作用的区域,远端的仓库
1.2 文件状态
1.2.1 未跟踪:新加的文件:位于工作区
1.2.2 已修改/删除(modified): 已修改表示修改/删除了某个文件,但还没有提交保存:位于工作区
1.2.3 已暂存(staged) : 已暂存表示把已 修改/删除/跟踪 的文件放在下次提交时要保存的清单中:位于暂存区
1.2.4 已提交(committed): 已提交表示该文件已经被安全地保存在本地数据库中了:位于本地仓库
2.基本操作
2.1 提交
2.1.2 git add 文件:将工作空间文件––暂存区
2.1.3 git commit 文件 -m “…”:暂存区文件–本地仓库,产生一个commit号
2.1.4 git push:本地仓库–远程仓库
2.2 解除提交/版本穿梭
1 git reset HEAD 文件/.:回退暂存区的文件,.所有
2 git reset [–hard] commit号/HEAD^:回退到某一个版本,–hard:不保留文件,HEAD ^表示上一个版本号
3 git checkout 文件/.:复原工作区修改的文件、复原丢失文件
如果 git checkout 文件 发生err,则在命令前执行 git reset HEAD 文件
4 git rm -f/–cached 文件:删除文件,-f:不保留,–cached:保留
2.3 显示信息
1 git status:查看工作区状态
2 git log [–stat]:查看提交日志[查看修改文件列表]
3 git show commit号:查看这次提交的结果
3.1 如下所示,新添文件红框处会显示new file,蓝框处对比–是旧版:null表示无文件;++是新版,data…是文件名。
3.2 绿色表示新增,红色表示删除
4 git diff commit1 commit2:以commit1为基准,对比commit2的变化。
4.1 git diff HEAD~1 HEAD等效git show HEAD,显示内容和git show一样
2.4 分支操作
1 git branch [-r/-a]:查看分支 本地/远端/所有
2 git branch 分支名:添加一个新分支
3 git checkout [-b] 分支名:切换/切换并且创建 一个新分支
4 git branch -d 分支名:删除一个分支
5 git merge 分支A:分支A合并到当前分支
2.5 远程互动
1 git remote -v:显示当前绑定的仓库
2 git remote add :绑定一个远程仓库
2.1 shortname:本地显示远程仓库的名字
2.2 远程url仓库的地址
3 git remote rename name new_name:重新命名一个仓库名字
4 git remote rm name:删除一个仓库
5 git pull name dev:从一个远程仓库拉取代码到指定分支
6 git push name:推送到远程仓库
注意:
1.推送一个新的远程仓库之前,通常要先拉取(pull)。
2.6 仓库拉取
1.git clone url:克隆远程仓库,也会在本地生产一个一模一样的本地仓库,一开始的时候用
2.git pull:更新本地仓库和远程同步,相当于git fetch + git merge origin/master
3.git fetch:拉取远端代码,但是不merge,如下图所示,origin/master前进了
使用git merge origin/master可合并内容,使用git log origin/master可查看本地和远端的差异
2.7 仓库管理操作
1 账号管理
1.记住账号密码:git config --global --replace-all credential.helper store
2.修改记住的密码和账号:vim ~/.git-credentials
2.格式:
https://13123181762:qazwsx******@gitee.com
https://lei.li:*********@gitlab.momenta.works
3.查看git配置文件信息:git config --list
2 gitignore 文件
3.2.1 vim .gitignore:修改文件
3.2.2 #:注释
3.2.3 *.txt:忽略所有以txt结尾的文件
3.2.4 build/:忽略build/目录下的所有文件
3.2.5 doc/1.txt:忽略doc目录下的1.txt文件
3 常用操作
git stash
暂时将工作区和暂存区的任何状态的文件全部保存到一个栈中,使得工作区处于干净的状态(没有任何修改状态文件),方便保存当前工作区,切换到分支上做其他事。
1.git stash:保存工作区和暂存区的任何状态的文件,重新使得工作区干净
1.1 如果未跟踪文件在工作区会保留,在暂存区会删除(临时)
2.git stash pop:返回保存的工作
2.1 会将返回的文件全部置于工作区中
注意:
1.git stash 后必须在git stash pop后,才能再次 git stash
2.git stash 后在对仓库修改之前,必须 git stash pop
整合上一个提交
git log // 查看commit号
git commt --amend // 整合一个提交
git log // 查看日志
重置项目
git restore --staged . // 放弃暂存区
git checkout . // 放弃工作区修改
git clean -f * // 放弃所有未跟踪文件
git pull // 重新拉取一下
解除push步骤:
git log // 复制之前push的commit号
git revert e889c7b244e33a291777fd5d3357fe9889fe2574 // 反做最新的提交
git push // 提交远程仓库
注意:
1.这种方法会多一个提交revert提交,但是可以将上一次的提交内容清除
merge 产生冲突及其解决
1.产生冲突后,当前仓库会显示状态,如下:
2.git status:查看冲突文件
3.打开文件解决冲突,冲突如下,<<<<<<< HEAD 当前分支的代码 = === = 合并过来的代码 >>>>>>> 分支名A
4.解决冲突后,git add 文件,git commit (禁止写文件)
git rebase
场景1:更换基底,分支B从分支A分出,当分支A和B都前进的时候,B分支pr到A分支,则需要将B分支基底更换为A分支最新的提交
git pull origin A
git rebase A // 在B分支下
场景1:出现冲突解决
1 当A和B分支前进时修改同一份文件同一个地方就会出现冲突,如下图所示,<<<<<<< HEAD A分支的代码 = === = B分支代码 >>>>>>> 分支名B
2 git status查看冲突文件
3 修改冲突文件,并将所有文件进行一次提交
4 git rebase --continue:继续换基
场景2:对当前分支的提交进行压缩、删减、修改
git rebase -i commitA号 // 生效区间:最新提交到A号之间(不包括A)
从上到下提交依次变新
1.pick:保留提交
2.d:删除提交
3.s:压缩提交:保留提交信息
4.f:压缩提交:不保留提交信息
注意:
1. 压缩提交是新提交(2,3)向旧提交(1)压缩,所以s,f之上必须要有一个pick
2. 合并错误会造成,这个区域所有提交丢失,注意保存副本
3. 使用git rebase --abort取消上次rebase
场景3:同一个分支rebase,pull时rebase
git pull --rebase
注意:如果有冲突,则继续解冲突