git教程
git、gitlab、github
git: 版本控制系统。
gitLab 和 gitHub:都是基于web的Git仓库,gitHub使用私有仓库需要收费。
https://www.cnblogs.com/leeyongbard/p/9777498.html
git安装和使用
【下载】,执行,点击下一步即可。
配置user信息:user.name 和 user.email
git config --global user.name 'xx name'
git config --global user.email 'xx.com'
注:windows系统命令用户名和email不用加 引号
注:多次操作同一个配置,后面的操作会覆盖前面的
config的三个作用域
git config --local :对某个仓库有效
git config --global:对当前用户的所有仓库有效(常用)
git config --system:对系统所有登录的用户有效
查看config配置,通过list
git config --list --local
git config --list --global
git config --list --system
增加配置项:–add(–add可省略)
git config [--local|--global|--system] --add section.key value(默认是添加在local配置中)
删除配置项:–unset
git config [--local|--global|--system] --get section.key(默认是获取local配置中内容)
git config 详细配置:https://www.cnblogs.com/fireporsche/p/9359130.html
新建仓库
gitee创建仓库:https://gitee.com/help/articles/4120
1.把已有项目代码纳入Git管理
cd 项目代码所在文件夹
git init
git init 后,会生成.git文件夹
git remote add origin https://gitee.com/crazywsp/test.git :同步本地仓库到远程仓库
git pull origin master --allow-unrelated-histories :合并本地分支和远程仓库分支
git push origin master : 提交文件到远程仓库
2.新建的项目直接用Git管理
cd 某个文件夹
git init your_project
cd your_project
git图形化工具 - Tortoisegit使用
git ignore文件解释
/mtk/ 过滤根目录下的mtk整个文件夹
注意:非根目录下的mtk文件夹及文件夹中文件会被上传,只有根目录下的该文件夹及文件夹文件会被忽略
mtk/ 过滤所有目录下的mtk文件夹及文件夹下文件
注意:所有目录下的该文件夹及文件夹文件都会被忽略
*.zip 过滤所有.zip文件
/mtk/do.c 过滤具体文件 mtk目录下的的do.c文件
!src/ 不过滤所有目录下的src文件夹
!*.zip 不过滤所有.zip文件
!/mtk/do.c 不过滤该文件
# dependencies npm包文件
/node_modules
# production 打包文件
/build
# misc
.DS_Store
npm-debug.log*
常用gitnore文件:涵盖idea和vue日常项目的ignore文件
.idea/
target/
node_modules/
.vscode/
dist/
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
Git 常用命令
提交文件
git Add 文件名 --添加文件到暂存区
git commit
git push
git reset --hard --将暂存区的所有操作还原
git commit -m"注释信息" --提交暂存区文件到本地版本库
git commit -am"注释信息" --直接将文件提交
git push --将本地版本库的分支推送到远程服务器上对应的分支
Git日志、分支操作命令:
git log --oneline 简洁的看commit记录
git log -n4 --oneline 查看最近四次的commit记录
git branch -v 查看本地分支信息
git branch -av 查看当前工作分支(包括本地和远端)
git log --all 查看所有分支提交记录
git log --all --graph 对分支区分查看提交记录
git log --oneline --all -n4 --graph 查看所有分支最近的4次提交记录
git help --web log 用浏览器查看git参数指令
gitk 图形化界面工具
git checkout master 切换到master分支
git branch newBranch 添加newBranch新分支
git checkout -b newBranch2 master 基于master分支,创建并切换到newBranch2分支上
git rm filename 删除文件并add到暂存区
.git目录分析
HEAD 代表当前正在工作的分支
config 存放配置信息,用户名、邮箱等
refs 存放标签和分支信息
objects tree对象
git分支理解
作用:更好的进行团队工作,保证不同任务(分支)之间互不影响。
比如说,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,
都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,
也就是说,主线上都是稳定的代码,可以直接拿来发布的。
特点:
GIT的技术可以说是非常强大,说一切开发都依赖于分支一点都不过分。一般项目的master分支都是稳定的代码,
可以直接发布或者被项目之外的人使用。新特性和BUG修改都在不同的分支上进行开发和测试。
这样规范了整个软件的开发流程。分支之间的互不影响这种特性可以增加团队合作的效率。
GIT分支的另外一个重要特性就是可以合并不同软件仓库(fork)的分支。
大体就是:开发团队有一个主软件仓库,开发者可以fork这个仓库,相当于克隆了一个私有的软件仓库,
然后开发者就可以在自己的软件仓库中建立分支并开发测试,测试完毕之后,可以向主软件仓库提交merge request,
这样新开发的特性就会被合并到主软件仓库的某个分支中。这种特性极大地推动了开源项目,
多年前参加开源项目都是神话,自从GIT出现后,每个人都可能成为开源项目的贡献者,
就是基于这种特性(请参照Github的pull request,和merge request是同一个东西)。
分支命令
git branch testing --创建一个testing分支
git checkout testing --切换到testing分支
git checkout -b newbranch --创建newbranch分支并立即切换到该分支
git branch -v --查看每一个分支的最后一次提交
git branch -d branchName --删除分支
分支合并
git checkout master --跳转到master分支
git merge test --合并test分支的内容到master分支
冲突处理
若执行分支合并时(git merge develop)出现冲突,如下:
$ git merge develop
Auto-merging a.java
CONFLICT (content): Merge conflict in a.java
Automatic merge failed; fix conflicts and then commit the result.
**查看冲突内容:**both modified: a.java 说明两个分支都修改了a.java文件,且出现了冲突
$ git status
On branch master
Your branch is ahead of 'origin/master' by 4 commits.
(use "git push" to publish your local commits)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: a.java
处理冲突
1.修改冲突文件 --vi a.java
2.通过git add命令标记为冲突已解决。 --git add a.java
3.通过git commit来完成合并提交。 --git commit -m "fix conflict"
commit处理
修改commit的message
修改最新一次的commit注释:
git commit --amend --进入修改注释页面,修改后保存即可
修改老旧commit的message:
1.找到要修改的注释的“前一次提交编号”
2.git rebase -i 0c02722826 --0c02722826为要修改注释的上一次提交编号,进入修改注释页面
3.把要修改注释信息的 pick 修改为 r,代表修改提交信息命令
4.修改注释信息,保存退出即可
暂存区相关操作(版本回退)
工作区:指本地文件被修改,没有保存到暂存区。
git diff --cached --该命令用来比较暂存区和HEAD文件差异
git diff --比较暂存区和工作区所含文件差异。
git reset HEAD --恢复暂存区和HEAD相同(上上一个提交状态就是HEAD^)
git reset --hard HEAD --恢复工作区、暂存区和HEAD相同
git reset --hard "commit编号" 回退到指定状态
git checkout 文件名 --恢复工作区和暂存区相同(删除后未提交文件进行恢复),将文件回到最近一次commit或git add时的状态
git clean -f --删除 untracked files(还原修改的文件)
git reset HEAD 文件名 文件名 文件名+空格+文件名,可同时取消多个暂存区文件的更改(即将暂存区的文件删除,返回到工作区,若需要继续恢复为修改前的状态,需执行“git checkout 文件名” 命令)
回退
git reset --hard commit编号 --恢复到该commit记录位置
git
在Linux
下删除未监视的文件(untracked files
)
# 删除 untracked files
$ git clean -f
# 连 untracked 的目录也一起删掉
$ git clean -fd
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
$ git clean -xfd
# 在用上述 git clean 前,建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
$ git clean -nxfd
$ git clean -nf
$ git clean -nfd
idea配置git及gitee
配置git
File–>Setting->Version Control–>Git–>Path to Git executable,选择安装git目录下的git.exe文件
配置gitee
1.安装Gitee插件:File - Settings – Plugins – Gitee
2.选择Version Control - Gitee:File - Settings – Version Control – Gitee – 输入 邮箱账号和密码
3.拉取仓库代码:VCS - Get from Version Control
4.Commit代码:提交代码到版本库
选择文件或文件夹,点击右键,Git – Commit File/Commit Directory
5.执行Push,提交到远程仓库。VCS – Git – Push
相关文档:
引用:
https://www.cnblogs.com/Sungeek/p/9152223.html#sg10
https://www.cnblogs.com/fireporsche/p/9359130.html