Git
1、安装
1、下载安装https://gitforwindows.org/
2、进入cmd 输入 git config --list查看配置:
C:\Users\zhang>git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/software/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
user.name=zhangyuboo
user.email=zhangyubo@kungeek.com
3、设置全局用户名和全局邮箱:
git config --global user.name "LingHuZhangHao"
git config --global user.email "woailinghu@163.com"
4、查看是否有秘钥:
进入git bash应用:输入 $ cd ~/.ssh
若出现“No such file or directory”,则表示需要创建一个ssh keys。
5、进入cmd中创建秘钥:
程序会提示您输入密钥的文件名、密码、确认密码,按三个回车即可。
将来在使用密钥的时候需要提供这个密码。确认完毕后,程序将生成一对密钥存放在当前文件夹下:
ssh-keygen -t rsa -C "zhangyubo@kungeek.com"
输入文件名保存公私秘钥,默认创建至:C:\Users\zhang/.ssh/id_rsa
输入两次密码即可
6、进入文件夹:C:\Users\zhang/.ssh
有两个文件:id_rsa 和 id_rsa.pub
私钥保存在自己的电脑上,公钥交项目负责人添加到服务器上。
用户必须拥有与服务器公钥所配对的私钥,才能访问服务器上的代码库
2、国内镜像
https://hub.fastgit.org/
https://github.com.cnpmjs.org/
3、没有签出最新的代码就开发了,提交git到远端提交失败的解决办法
1、首先在本地建新的dev分支
2、将远端的master分支拉取到本地覆盖dev分支
3、在本地将master分支合并到本地dev分支
4、将合并后的dev分支推到远端分支比如dev,并在远端合并到master分支
5、将远端合并后的master拉取到本地master分支
6、删除本地的dev分支
4、git命令
1、创建一个git仓库(实际上是创建一个.git文件)
git init
2、将所有文件放入暂存区(实际上是把所有的修改放入暂存区,准备提交)
git add --all
git add filename
3、撤销放入暂存区
git reset HEAD --all
git reset HEAD filename
4、提交修改
git commit -m "提交的说明"
5、查看未提交的文件状态(未add红色和已add绿色)
git status
6、提交前查看文件修改状态
git diff filename
7、查看提交日志
git log
8、回滚到某一版本
git reset --hard d7b5
9、查看本地所有分支
git branch
查看远端所有分支
git branch -r
10、创建分支
git branch 分支名
11、切换到指定分支
git checkout 分支名
12、创建分支并切换到新分支
git checkout -b 分支名
13、合并某分支修改到当前分支
git merge 分支名
14、分支合并图
git log --graph
15、删除分支
git branch -d 分支名
16、添加远端仓库
git remote add origin ‘url’
17、移除远端仓库
git remote remove origin
18、提交到远端仓库(第一次提交加上-u表示推送master分支的所有内容,后面推送就不需要了)
git push -u origin master
提交到指定分支
git push origin feature/HDATA-1159:feature/HDATA-1159
19、拉取远端分支并合并到当前分支 (git fetch+ git merge命令。git fetch用于获取远程某个仓库的某个分支,然后git merge会将拉取的分支与本地分支进行合并)
git pull origin develop
20、克隆
git clone 'url'
21、对比连个分支内容
git diff 分支1 分支2 --stat (加上 --stat 是显示文件列表, 否则是文件内容diff)
5、查看一个文件的修改历史
1. git log filename
可以看到fileName相关的commit记录
2. git log -p filenam
可以显示每次提交的diff
3. 只看某次提交中的某个文件变化,可以直接加上fileName
git show c5e69804bbd9725b5dece57f8cbece4a96b9f80b filename
6、上线流程
方案一:每次都先新建分支,然后在新分支上修改
1、维护一个上线表格,标记修改的文件,简单描述修改内容
2、在idea中测试后,上生产测试,测试通过后,依据表格创建sublime文件上传git发布即可
方案二:每次在master分支上修改,然后创建新的分支,将master分支内容合并到新分支提交:
7、git修改回退
git checkout -- file
8、报错
1、error: src refspec master does not match any. error: failed to push some refs to 'notebook
问题:远程仓库notebook为空
2、fatal: refusing to merge unrelated histories
问题:拒绝合并不相关的历史
解决:加上git pull origin master --allow-unrelated-histories
3、warning: LF will be replaced by CRLF in target/classes/log4j.properties.
The file will have its original line endings in your working directory.
问题:LF和CRLF其实都是换行符,但是不同的是,LF是linux和Unix系统的换行符,CRLF是window 系统的换行符。这就给跨平台的协作的项目带来了问题,保存文件到底是使用哪个标准呢? git为了解决这个问题,提供了一个”换行符自动转换“的功能,并且这个功能是默认处于”自动模式“即开启状态的。
这个换行符自动转换会把自动把你代码里 与你当前操作系统不相同的换行的方式 转换成当前系统的换行方式(即LF和CRLF 之间的转换),这样一来,当你提交代码的时候,即使你没有修改过某个文件,也被git认为你修改过了,从而提示"LF will be replaced by CRLF in *****"
解决:在项目下执行:git config core.autocrlf false (仅对当前git仓库有效)
4、fatal: --author 'zyb17310606952@163.com' is not 'Name <email>' and matches no existing author
解决:修改参数 git config user.name = xxx
git config user.name = xxx
如果不行加上--global改全局参数