目录
一、本地仓库的基本操作
首次使用git时可以使用下面2个命令配置用户名和邮箱:
$git config --global user.name "laowang"
$git config --global user.email laowang@example.com
1.1 创建git本地仓库
创建git工程有2种方式,一种是在本地自建git仓库进行代码编写,一种是从远程拉取别人的项目到本地。
自建git仓库:
$git init
从远程拉取代码:
git clone https://github.com/HuiMengYouXian/excel_analysis.git
1.2 修改仓库内文件状态
git仓库里的每个文件都有一个状态,自建的git仓库里面的文件状态都是【未跟踪】,只有把它变为【暂存】状态后,后续生成的代码版本里才能有这个文件/目录,使用命令:
$git add <文件名>
或者
$git add -A 把文件夹里全部文件都变为【暂存】态
如果想把一个已跟踪的文件/目录变为【未跟踪】状态,使用命令:
$git rm <文件名>
或者
$git rm --cache <文件名> 让这个文件/目录保留在代码目录里但是不被跟踪
代码修改后要把文件设置成【暂存】状态,使用命令:
$git add <文件名>
或者
$git add -A
如果想取消这个已修改文件的缓存状态,使用命令:
$git reset HEAD <文件名>
1.3 提交缓存状态的代码到当前所在分支
把【缓存】状态的文件提交到本地仓库当前所在的分支,使用命令:
$git commit -m "代码修改描述信息"
提交后代码版本会更新,那么在新的代码版本里这些文件又变成了【未修改】状态
关于git commit的一些知识点:
1.4 已经提交了代码但是想取消提交
如果已经提交了代码但是想取消提交,使用命令:
$git reset head~ --soft
参数解释:
head 指的是当前的提交
head~ 指上一次提交
head~3 指的是倒数第三次的提交
--soft 表示只是撤销了git commit这个操作,之前的git add还是有效的,如果不加--soft则表示git commit和 git add 都撤销了
虽然执行git reset head~ --soft,但是本地修改过的代码还是在的,可以继续编辑、暂存和提交
--hard 使用这个参数就表示撤销了git add 和git commit,而且本地修改过的代码也被删除了-----不要用这个参数
1.5 查看文件的状态
怎么查看文件的状态,使用命令:
$git status 查看哪些文件没有暂存?哪些文件已暂存但是没有提交?我目前是在哪个分支下呢?
没有暂存的文件会用红色字体显示,已暂存但没提交的文件会用绿色字体显示
对于没有暂存的文件可以使用命令:
$git commit -a -m "代码修改描述信息" 直接进行提交
也可以写成
$git commit -am "代码修改描述信息"
1.6 查看文件修改具体内容
当文件修改后未被暂存(没有执行git add),如果想看下文件具体被修改的内容,使用命令:
$git diff
1.7 查看历史提交信息
查看历史提交信息,使用命令:
$git log
或者
$git log --pretty=oneline 把每条提交信息一行展示
或者
$git log --pretty=format:"%h-%an,%ar:%s" 按照指定格式输出提交历史信息
或者
$git log --graph 用图表的方式输出历史提交信息
git log命令打印如下内容:
git log --pretty=oneline打印如下内容
git log --pretty=format:"%h-%an,%ad:$s"
提交信息里面的commit值是唯一的
1.8 从远程仓库拉取/抓取数据
git fetch 远程仓库名
作用是从远程获取代码库
git fetch 远程仓库别名 ————> 从远程仓库拉取我本地仓库没有的数据
git merge 远程仓库别名/本地仓库的分支名 ————> 将服务器上的任何更新合并到本地仓库的指定分支
git pull
用于从远程获取代码并合并本地某个分支
git pull <远程仓库别名> <远程分支名>:<本地分支名>
如果远程分支是与本地当前所在分支合并,则可写成:
git pull <远程仓库别名> <远程分支名>
1.9 临时贮藏git stash
git stash或者git stash push
适用于你代码写到一半,但是需要切换到别的分支,比如正在开发需求,临时需要修个bug,此时不建议使用git commit -m "说明信息"先进行提交。
上面内容是我修改了test.md,使用git stash后把修改的内容暂时存储了,如果此时你打开test.md会发现里面没有刚才改动的内容,这时可以正常去切换分支了。
当你修复完bug需要回到原来的分支继续开发时,使用命令:git stash apply恢复之前的改动即可,可以看到我之前写的内容恢复了
如果执行git stash后没有执行git stash apply,就直接去修改文件,修改后又执行git stash进行第二次贮藏,或者后续又多次修改、贮藏,且都没有执行恢复操作,可以通过git stash list查看贮藏的内容列表,之后可以通过git stash apply stash@{数字}来选择恢复哪次的修改。
最后一个stash@{3}是第一次修改后贮藏的内容,stash@{2}表示第二次修改后贮藏的内容,以此类推,比如你要恢复第一次修改的内容,执行git stash apply stash@{3}即可,可以check下test.md的内容恢复是否正确
1.10 变基rebase
概念解释:分别从master分支拉取的代码,A分支和B分支开发不同的功能,提交的时候希望一次提交2个分支内容,就可以把一个分支搬到另一个分支上:
git checkout B
git rebase A -------->这样git就会把B分支上的修改(如果代码有冲突需要解决)移到A分支上
但是这个操作的前提是你没有把你的分支提交到远程仓库。
git rebase -i head~3 对前3次的提交进行修改 -------->这个比较复杂 最好别用
二、远程仓库的操作
2.1 添加远程仓库
添加一个新的远程git仓库,起个别名为origin
git remote add origin 远程存储库的url
2.2 查看全部远程仓库
查看远程所有的仓库,使用命令:
git remote -v 可以显示远程仓库的名字和它的具体地址
git remote 只能展示远程仓库的名字
2.3 查看某个远程仓库的具体信息
查看某个远程仓库的具体信息,可以使用命令:git remote show 远程仓库名
会显示该仓库的具体地址,默认分支,全部分支以及
在特定的分支上执行 git push 会自动地推送到哪一个远程分支。 它也同样地列出了哪些远程分支不在你的本地,哪些远程分支已经从服务器上移除了,还有当你执行 git pull 时哪些分支会自动合并
2.4 删除远程仓库
删除远程仓库:git remote -rm 远程仓库名
2.5 修改远程仓库的别名
修改远程仓库的 别名,使用命令:
git remote rename 旧别名 新别名
2.6 把本地仓库的分支代码提交到远程仓库的某个分支
把本地的master提交到远程testHappy仓库的master分支,使用命令:
git status 先看下自己是不是在master分支里
git push <远程仓库别名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程仓库别名> <本地分支名>
git push testHappy master:master
或者
git push testHappy master
三、本地代码提交遇到无权限问题
本地提交代码到远程仓库时,如果使用github的用户名+登录密码的方式,目前是不支持了,会有如下报错:
有2种解决方法:
3.1 在github生成临时token
在github生成临时token做为代码提交时的密码,生成步骤如下:
3.2 在本地生成ssh密钥把公钥上传到github
在本地生成ssh密钥,把公钥上传到github,以后拉取远程代码使用ssh方式即可
新建文件夹 ssh_test,使用命令:
复制公钥到github
四、分支branch操作
4.1 分支的概念
也可以把分支理解成一个指向提交对象的指针,如下:
初始化本地仓库的时候会自动创建一个master分支,每次 代码修改后都会git commit 到本地的master分支,之后再git push到远程仓库,上面都有例子。
在日常项目开发中,代码修改会在feature分支,可能存在多个feature分支,修改完成后提交到develop分支供qa测试,测试没问题后会新建一个release分支进行发布,发布后验证完毕没问题后就可以把release分钟的代码合并到master分支。hot fixes分支一般用于bug修复。
4.2 怎么确认自己现在哪个分支上
git log
git log 可以确认本地仓库当前所在分支
绿色表示本地仓库当前所在的分支,红色表示这个分支提交到的远程仓库和分支,HEAD就表示仓库的默认分支
git status
git branch --list和git branch
git branch --list和git branch 可以列出本地仓库全部的分支
*号后面的就是你当前所在的分支
git branch -a
git branch -a 可以列出本地和远程仓库的全部分支
4.3 创建新的分支
在本地创建新的分支
git branch feature1 可以在本地创建新的分支
在远程创建分支
想在远程创建分支,可以通过git push代码提交的方式:
git push 远程仓库名 本地分支名 ——> 在远程仓库创建与本地仓库同名分支并把分支代码提交上去
git push 远程仓库名 本地仓库名:远程仓库分支名 ——> 在远程仓库创建新的分支名,并把代码提交上去
4.4 切换分支
git checkout feature1 在本地切换分支
4.5 新建一个分支并且切换到该分支
git checkout -b feature2
4.6 删除分支
删除本地仓库的分支
删除本地仓库的分支,使用命令:git branch -d <分支名字>
删除远程仓库的分支
删除远程仓库的分支,需要使用git push的方式:
git push 远程仓库名 --delete 要删除的分支名
4.7 查看全部分支的提交记录
git log --all
使用上面的命令查看全部分支的提交历史记录,展示的不是很好看,可以使用git log --all --graph
4.8 合并到当前分支
切换到master分支,之后把feature1分支的内容合并到master分支上
验证下master分支是否新增了test.md文件
现在我想把feature2也合并到master分支
此时出现的代码冲突;
因为feature1和feature2都新增了test.md并书写了不同的内容,我们可以看下具体的内容冲突是什么:打开test.md
vi test.md
我们需求确认是保留谁里面的内容,把不要的那部分直接删除即可:
保存退出test.md即可。
4.9 推送分支
git push 远程仓库名 本地仓库分支名:远程分支名
git push testHappy master:master
如果本地分支名和远程分支名相同,则可以写成:
git push testHappy master
五、补充资料链接
git官方:Git - Book
github: 快速入门 - GitHub 文档