GIT学习
Windows安装git
下载https://git-scm.com/downloads 安装无脑下一步
设置名字,邮箱
$ git config –global user.name “Xpand”
$ git config –global user.email “admin@qwas.top“
git config 命令的 –global参数,用了这个参数,表示这台机器上所有仓库都会使用这个配置,当然也可以单独给每个仓库配置
创建仓库
cd f: 进入f盘
mkdir gitxuexi 创建gitxuexi文件夹
cd gitxuexi 进入gitxuexi文件夹
pwd 查看当前目录
$ git init 设置这个目录Git可以管理的仓库
Initialized empty Git repository in F:/gitxuexi/.git/
仓库创建会生成.git目录,但目录是隐藏的,可以用ls -ah命令查看
注意:Windows自带的记事本会在每个文件开头添加了0xefbbbf(十六进制)的字符
添加到仓库
编写一个readme.txt文件,
添加git add readme.txt到仓库
提交git commit -m “提交说明”
时光穿梭机
修改文件内容
git status运行查看仓库状态会提示你文件被修改过,但没有准备提交的修改。
git diff查看具体被改动的地方
版本回退
git log查看历史记录
git log –pretty=oneline查看简略记录
上个版本用HEAD^表示,上上个版本用HEAD^^表示,前100版本用HEAD~100
回退命令git reset –hard HEAD^
回到最新git reset –hard <代表版本号的哈希值>
git reflog用来记录你每一次命令
工作区和暂存区
git add 命令实际上就是把要提交的所有修改改到暂放区,然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
管理修改
git diff HEAD – readme.txt
git diff HEAD – <需要比较的文件>
Git是跟踪修改的,每次修改,如果不用git add到暂存区,那就不会加入到commit中
撤销修改
git checkout – readme.txt
git checkout – <需要撤销的文件>
git reset HEAD <需要丢弃修改文件>
删除文件
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
远程仓库
创建SSH Key
ssh-keygen -t rsa -C “admin@qwas.top“
添加远程库
从电脑上连接到github仓库上
git remote add origin git@github.com:xiaopengand/xpand.git
把本地库推送到远程库上
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!
这里遇到了一个问题,花了我半天时间,最后发现只是公司ip被墙了,用自己流量就行了,就这花了我半天时间。
远程仓库克隆
git clone <远程仓库地址>
分支管理
创建与合并分支
查看分支:git branch
创建分支:git branch <需要创建分支名>
切换分支:git checkout <需要切换的分支> 或 git switch <需要切换的分支>
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用 git log –graph 命令可以看到分支合并图。
分支管理策略
git merge –no-ff -m “更新说明” <合并分支名>
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出曾经做过合并,而fast forward 合并就看不出来曾经做过的合并。
Bug分支
但手头分支没有完成时,先把工作现场git stash一下,然后去其他分支修复,再git stash pop,回到工作现场;再master分支上修复bug,想要合并到当前dev分支,可以用git cherry-pick
Feature分支
开发一个新的feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <需要强制删除的分支名> 强行删除。
多人协作
查看远程仓库:git remote
或者用 git remote -v 显示更详细的信息
显示了push说明有推送权限
推送分支:git push origin master
推送其他分支:git push <远程仓库名称> <其他分支名称>
抓取分支
远程克隆:git clone 仓库地址
git branch 查看分支
git push origin dev 推送dev分支到远程
git checkout -b dev origin/dev 创建远程origin的dev分支到本地
1.首先,可以试图用git push origin
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream-to
小结
查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突.
Rebase
- rebase操作可以把本地未push的分叉提交历史整理成直线;
- rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
标签管理
创建标签
创建标签:git tag
查看标签:git tag
给历史记录打上标签:git tag
查看标签信息:git show
创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m ”标签说明“操作标签
删除标签:git tag -d
推送标签到远程仓库:git push origin v1.0
一次性推送全部标签:git push origin –tags
如果删除远程标签:
先删除本地git tag -d
然后从远程删除,删除命令也是push,但格式如下:
git push origin :refs/tags/使用GitHub
使用Gitee
使用命令git remote add origin <仓库地址>
使用gir remote add时报错
说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程信息
删除已有的github远程库:git remote rm origin
再关联Gitee的远程库
git remote add origin <gitee仓库地址>
通过git push命令就可以把本地库推送到Gitee上。
一个本地库同时关联到GitHub,又关联Gitee
git remote add github <github仓库地址>
git remote add gitee <gitee仓库地址>
git push github master
git push gitee master自定义Git
git config –global color.ui true
这样,Git会适当地显示不同的颜色。
忽略特殊文件
忽略文件的原则是:
1.忽略操作系统自动生成的文件,如缩略图等;
2.忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没有必要放进版本库,比如Java生成的.class文件;
3.忽略你自己带有敏感信息的配置文件,如存放口令的配置文件。
在Git工作区下的根目录创建一个特权的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。GitHub上有各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:配置文件地址https://github.com/github/gitignore
如果你确实添加该文件,可以用-f强制添加到git:
git add -f
或者你发现,可能是.gitignore写的有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查,-v参数查看具体:
git check-ignore -v
把指定文件排除在.gitignore规则外的写法就是!+文件名。
配置别名
git config –global alias.st status
输入git st 表示 git status
–global 参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
甚至还有人丧心病狂地把lg配置成了:
git config –global alias.lg “log –color –graph –pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ –abbrev-commit”
配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
配置文件放哪了?每个仓库的Git配置文件都放在.git/config文件中:
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中: