Git详解
Git的详解
一.git的全局设置
git config --global user.name "username"
git config --global user.email "email"
二.Git的基础命令
(在需要目录下打开Git bash窗口)
1.在本地初始化一个Git仓库(不常有)
git init
2.从远程仓库克隆
git clone +地址
3.基础命令
3.1基础操作
通用:
`git log` 查看版本号
`git status`:查看状态
清除密码:
git config --system --unset credential.helper
git credential-manager uninstall
重新设置要存储账号密码:
git config --global credential.helper=store
3.2本地仓库操作:
`git add`: 把文件添加到本地仓库的暂存区
git add * 添加所有
`git commit`: 把文件提交到本地仓库,注意必须加 -m 后面跟着本次提交的内容说明
git commit -m "...内容说明.." + 被提交文件名
添加了说明没有文件名 就只要说明没有文件名
没有添加说明 说明默认为文件名
内容说明最号为: 说明 + 文件名 git commit -m "init test.txt" test.txt
`git reset`: 将暂存区的文件取消暂存或者却换到指定版本
git reset + 文件名 取消暂存
git reset --hard + 版本号 回到指定版本
3.3远程仓库操作:
`git push`:将本地仓库的内容变更 提交到远程仓库 origin就代表远程仓库,master代表分支 ,第一次提交需要加上`-u`参数,git会将本地仓库的master分支和远程仓库的master分支做一个关联
`git remote`: 将本地仓库和远程仓库链接起来 origin是远程仓库的名称,git的默认,可以理解为给远程仓库起了个别名
git remote -v 加v可以查看具体哪一个远程仓库
git remote add origin + url :连接远程仓库
git push origin + 分支名: 从本地推送到远程
git pull origin + 分支: 从远程拉取
无法push的问题!!!注意事项
!!!push前需要pull拉下
git pull origin + 分支= git fetch + git merge FETCH_HEAD
**git pull --rebase origin + 分支 = git fetch + git rebase FETCH_HEAD **
git merge需要冲突要手动解决 git rebase会解决冲突 会更好
git merge:
D--------E
/ \
A---B---C---F----G--- test, master
git rebase:
A---B---D---E---C‘---F‘--- test, master
git --rebase会将两个分支融合成一个线性的提交,不会形成新的节点。
rebase好处
想要更好的提交树,使用rebase操作会更好一点。
这样可以线性的看到每一次提交,并且没有增加提交节点。
merge 操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,add 修改,commit 就可以了。
而rebase 操作的话,会中断rebase,同时会提示去解决冲突。
解决冲突后,将修改add后执行git rebase –continue继续操作,或者git rebase –skip忽略冲突。
解决问题
解决每次git pull、git push都需要输入账号和密码的问题
git config --global credential.helper store
然后再重新执行一次git pull,这次它还是提示你输入账号和密码:
如果本地仓库和远程仓库都有各自的历史
git pull origin 分支 --allow--unrelated--histories
3.4分支操作:
`git branch`: 分支操作命令
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch -a 列出所欲本地分支和远程分支
`git branch 分支名称`: 创建新分支 (默认从当前的分支进行创建)
`git push origin + 新分支名` 推送新分支到远程
`git branch 新分支名称 已有分支名称` : 从已有的分支copy创建一个新的分支
`git checkout 分支名称` : 切换到对应的分支
`git branch -d 分支名称`:删除分支(当前所在的分支 不能删除)
3.5分支合并
`git merge`
例:将a1 a2 合并到主分支master
git checkout master
git merge a1 到编辑窗口 保存退出后合并
git merge a2 同理
可以手动将特殊的删掉 留下需要合并的
<<<<<<< HEAD
这块代码是当前版本的代码
=======
=======
这块代码是dev分支的代码
>>>>>>> dev
然后重新提交上去
如果出现 cannot do a partial commit during a merge
在commit'时最后加上 -i
3.6 git标签
`git tag`:查看标签
`git tag + name`: 创建标签
`git push origin + name`:将标签推送到远程,记录下当前分支的所有信息
`git checkout -b 分支名 标签名`: 将标签中的消息到处到某分支
三.工作区和缓存区
Git 工作区、暂存区和版本库概念:
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
四 idea使用git
!!!初始化本地 git init
!!!克隆
4.1 gitignore
.gitignore
: 忽略不需要提交的文件
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
# Maven
log/
target/
4.2 idea解决冲突
绿色:无脑点箭头 (Accept)
红色(冲突) :当前的版本和远程仓库版本之间选择一个 ,另一个忽略即可(选一个箭头Accept,另一个x Ignore)
蓝色:无脑点箭头 (Accept)
4.3 stash
`git stash list`:查看
`git stash apply`: 恢复
`git stash drop`: 删除
`git stash pop` :恢复并删除
4.4 revert回滚
1、找到你误提交之前的版本号
2、git revert -n 版本号
3、git commit -m xxxx 提交
4、git push 推送到远程
4.5 idea分支切换和合并
Checkout切换到develop分支
Merge 'develop' into 'master' 将develop分支合并到master分支
push 将本地新建的分支提交的远程
五 .gitignore不起作用
0. 进入项目路径
1. 清除本地当前的Git缓存
git rm -r --cached .
2. 应用.gitignore等本地配置文件重新建立Git索引
git add .
3. (可选)提交当前Git版本并备注说明
git commit -m 'update .gitignore'
.gitignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
# Mac
.DS_Store
# Maven
log/
target/
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar