若是有必定版本管理软件基础或使用过 svn 的你,这篇 git 的文章应该是最适合你的。做者也是从 svn 过来,从开始的以为 git 麻烦,到最后仍是感受 git 是最好用的版本控制软件。javascript
虽然,大部分状况下,IDEA 已经对 Git 兼容特别好;能够完成大部分的 Git 的提交,push ,合并等操做,但有时候一些回退的操做仍是经过命令来操做会方便点。html
本文不会像大多数文章同样,通篇给你介绍一堆的 git 命令。我的认为,这种命令的东西用多了天然记住了,没用到的时候记再多,用的时候同样忘,并且用的时候可使用 git 的帮助或直接网上搜命令。java
文章从 git 的仓库,分支,经常使用 git 工具及 git 和 svn 的区别来讲明git
git 分为两个版本库,全部 git 信息都保存在 .git 隐藏文件夹中,大部分状况,咱们会在本地维护自已的版本信息。github
常见的仓库命令shell
# 初始化本地仓库,默认会初始化一个 master 分支 git init # clone 一个远程仓库, 建立了一个本地仓库,一个本地仓库的 master 分支,拉取远程仓库 master 的内容 git clone address # 初始化本地仓库后,添加一个远程仓库 git remote add 仓库Id 仓库地址
远程仓库的增删改查,经过在 git 控制台 git remote
双击 tab 便可看到全部操做,包含 rename
,remove
,set-url
,add
等。数据库
建立本地版本库,而后添加远程版本库,而后把文件 commit 到本地,最后 push 到远程版本库json
# 在你的代码文件夹根目录中初始化本地版本库 git init # 添加须要提交的文件 git add . # 提交到本地仓库 git commit -m "初始提交" # 添加远程仓库,并命仓库名为 test git add test git@gitee.com:sanri/test.git # 推送代码到远程版本库的 master 分支 git push test master
工做区有一个隐藏目录.git
,这个不算工做区,而是Git的版本库(Repository)。segmentfault
Git的版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为咱们自动建立的第一个分支master
,以及指向master
的一个指针叫HEAD
。windows
git add
实际就是把文件添加进了暂存区git commit
把暂存区的全部内容提交到了版本库Git跟踪并管理的是修改,而非文件,你每次修改工做区中的内容,都需从新添加到暂存区才能提交。
Svn 是跟踪文件的,文件状态:untracked -> tracked -> commited
Git 是跟踪修改的,只要文件有修改,就需添加到暂存区,而后提交
建议下载 sourceTree
来看这部份内容,比 git status
会更加清晰,它会明确的给你标出暂存区,工做区,本地仓库和远程仓库。
git add
添加到暂存区了,想撤回 git reset HEAD file
不加 file 表示所有撤回,只是撤回添加,不会影响工做区文件
git commit
添加到版本库了,想撤回 git reset --soft HEAD^
^
表示撤回一次提交,关于有几回提交,在 IDEA 中能够看得更清楚
这个撤回撤回到了暂存区,也不会影响工做区文件。
再使用 git checkout -- file
能够把工做区的文件还原成暂存区的或版本库中的文件
git reset HEAD file
区别是,git reset
不会影响工做区的文件,但 git checkout --
会替换工做区的文件。git checkout -- file
来还原。git checkout -- file
还原来版本库版本git reset HEAD file
,git checkout -- file
commitId
,而后git checkout commitId file
本地仓库和远程仓库都会有分支,通常来讲是一一对应的,建立仓库时会默认初始化一个 master
分支。
创建仓库时,会有一个默认分支master
分支,现已经基本约定这个分支是能够随时发布的分支。
我的理解 :
当拉取远程代码的时候,若是你和别人改的是同一个文件,则颇有可能出现冲突,展现以下
$ git merge feature1 Auto-merging readme.txt CONFLICT (content): Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result.
查看 readme.txt 的内容
Git is a distributed version control system. Git is free software distributed under the GPL. Git has a mutable index called stage. Git tracks changes of files. <<<<<<< HEAD Creating a new branch is quick & simple. ======= Creating a new branch is quick AND simple. >>>>>>> feature1
<<<<<<< HEAD
表示远程的内容,>>>>>>> feature1
表示你的分支的内容,中间用 ========
分隔,有几个这样的区志就是有几个冲突,使用 compare 可 idea 工具解决冲突后,而后从新添加,提交,推送。
在须要注册的时候,关闭安装,而后找到 %LOCALAPPDATA%\Atlassian\SourceTree
添加文件 accounts.json
内容以下:
[ { "$id": "1", "$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity", "Authenticate": true, "HostInstance": { "$id": "2", "$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount", "Host": { "$id": "3", "$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount", "Id": "atlassian account" }, "BaseUrl": "https://id.atlassian.com/" }, "Credentials": { "$id": "4", "$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account", "Username": "", "Email": null }, "IsDefault": false } ]
.git
目录添加一个文件 .gitignore
每一行是忽略的文件,可使用能配符,目录。
可能你的项目中 js 脚本比较多,被 github 自动判断为 javascript 项目了,能够强制改回来,git
目录添加一个文件 .gitattributes
内容为
*.js linguist-language=Java
fatal:unable to access ': SSL certicate problem: unable to get local issuer certificate
解决办法,两种:
配置全局用户名密码和跳过 ssl 认证
# 跳过 ssl 认证 git config --global http.sslVerify false # 存储用户名密码认证信息,不须要每次都输入用户名密码 git config --global credential.helper store
# 初始化本地仓库,默认会初始化一个 master 分支 git init # clone 一个远程仓库, 建立了一个本地仓库,一个本地仓库的 master 分支,拉取远程仓库 master 的内容 git clone address # 初始化本地仓库后,添加一个远程仓库 git remote add 仓库Id 仓库地址 # 建立分支 git branch 分支名 # 合并分支到当前分支 git merge 分支名 # 切换分支 git checkout 分支名 # 版本还原相关 git reset --mixed # 此为默认方式,不带任何参数的git reset,它 回退 commit 和 add 信息 git reset --soft # 回退到某个版本,只回退了commit的信息。若是还要提交,直接commit便可 git reset --hard # 完全回退到某个版本,本地的源码也会变为上一个版本的内容,慎用! # stage -> workspace git reset HEAD <files> # repository -> stage git reset --soft <hash> git reset --soft HEAD^ git reset --soft HEAD~2 # repository -> workspace git reset --mixed <hash> # workspace 重置为 repository 内容 git reset --hard <hash> # 使某个文件使用上次的内容 git checkout -- file # 使某个文件使用某个版本的内容 git checkout commitId file
创做不易,但愿能够支持下个人开源软件,及个人小工具,欢迎来 gitee 点星,fork ,提 bug 。
Excel 通用导入导出,支持 Excel 公式
博客地址:https://blog.csdn.net/sanri1993/article/details/100601578
gitee:https://gitee.com/sanri/sanri-excel-poi
使用模板代码 ,从数据库生成代码 ,及一些项目中常常能够用到的小工具
博客地址:https://blog.csdn.net/sanri1993/article/details/98664034
gitee:https://gitee.com/sanri/sanri-tools-maven