赞
踩
目录
首次使用git时可以使用下面2个命令配置用户名和邮箱:
- $git config --global user.name "laowang"
- $git config --global user.email laowang@example.com
创建git工程有2种方式,一种是在本地自建git仓库进行代码编写,一种是从远程拉取别人的项目到本地。
自建git仓库:
$git init
从远程拉取代码:
git clone https://github.com/HuiMengYouXian/excel_analysis.git
git仓库里的每个文件都有一个状态,自建的git仓库里面的文件状态都是【未跟踪】,只有把它变为【暂存】状态后,后续生成的代码版本里才能有这个文件/目录,使用命令:
- $git add <文件名>
- 或者
- $git add -A 把文件夹里全部文件都变为【暂存】态
如果想把一个已跟踪的文件/目录变为【未跟踪】状态,使用命令:
- $git rm <文件名>
-
- 或者
-
- $git rm --cache <文件名> 让这个文件/目录保留在代码目录里但是不被跟踪
代码修改后要把文件设置成【暂存】状态,使用命令:
- $git add <文件名>
- 或者
- $git add -A
如果想取消这个已修改文件的缓存状态,使用命令:
$git reset HEAD <文件名>
把【缓存】状态的文件提交到本地仓库当前所在的分支,使用命令:
$git commit -m "代码修改描述信息"
提交后代码版本会更新,那么在新的代码版本里这些文件又变成了【未修改】状态
关于git commit的一些知识点:
如果已经提交了代码但是想取消提交,使用命令:
$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,而且本地修改过的代码也被删除了-----不要用这个参数
怎么查看文件的状态,使用命令:
$git status 查看哪些文件没有暂存?哪些文件已暂存但是没有提交?我目前是在哪个分支下呢?
没有暂存的文件会用红色字体显示,已暂存但没提交的文件会用绿色字体显示
对于没有暂存的文件可以使用命令:
- $git commit -a -m "代码修改描述信息" 直接进行提交
- 也可以写成
- $git commit -am "代码修改描述信息"
当文件修改后未被暂存(没有执行git add),如果想看下文件具体被修改的内容,使用命令:
$git diff
查看历史提交信息,使用命令:
- $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值是唯一的
作用是从远程获取代码库
- git fetch 远程仓库别名 ————> 从远程仓库拉取我本地仓库没有的数据
-
- git merge 远程仓库别名/本地仓库的分支名 ————> 将服务器上的任何更新合并到本地仓库的指定分支
用于从远程获取代码并合并本地某个分支
- git pull <远程仓库别名> <远程分支名>:<本地分支名>
-
- 如果远程分支是与本地当前所在分支合并,则可写成:
-
- git pull <远程仓库别名> <远程分支名>
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的内容恢复是否正确
概念解释:分别从master分支拉取的代码,A分支和B分支开发不同的功能,提交的时候希望一次提交2个分支内容,就可以把一个分支搬到另一个分支上:
- git checkout B
-
- git rebase A -------->这样git就会把B分支上的修改(如果代码有冲突需要解决)移到A分支上
但是这个操作的前提是你没有把你的分支提交到远程仓库。
git rebase -i head~3 对前3次的提交进行修改 -------->这个比较复杂 最好别用
添加一个新的远程git仓库,起个别名为origin
git remote add origin 远程存储库的url
查看远程所有的仓库,使用命令:
- git remote -v 可以显示远程仓库的名字和它的具体地址
- git remote 只能展示远程仓库的名字
查看某个远程仓库的具体信息,可以使用命令:git remote show 远程仓库名
会显示该仓库的具体地址,默认分支,全部分支以及
在特定的分支上执行 git push 会自动地推送到哪一个远程分支。 它也同样地列出了哪些远程分支不在你的本地,哪些远程分支已经从服务器上移除了,还有当你执行 git pull 时哪些分支会自动合并
删除远程仓库:git remote -rm 远程仓库名
修改远程仓库的 别名,使用命令:
git remote rename 旧别名 新别名
把本地的master提交到远程testHappy仓库的master分支,使用命令:
- git status 先看下自己是不是在master分支里
-
- git push <远程仓库别名> <本地分支名>:<远程分支名>
- 如果本地分支名与远程分支名相同,则可以省略冒号:
- git push <远程仓库别名> <本地分支名>
-
- git push testHappy master:master
- 或者
- git push testHappy master
本地提交代码到远程仓库时,如果使用github的用户名+登录密码的方式,目前是不支持了,会有如下报错:
有2种解决方法:
在github生成临时token做为代码提交时的密码,生成步骤如下:
在本地生成ssh密钥,把公钥上传到github,以后拉取远程代码使用ssh方式即可
新建文件夹 ssh_test,使用命令:
复制公钥到github
也可以把分支理解成一个指向提交对象的指针,如下:
初始化本地仓库的时候会自动创建一个master分支,每次 代码修改后都会git commit 到本地的master分支,之后再git push到远程仓库,上面都有例子。
在日常项目开发中,代码修改会在feature分支,可能存在多个feature分支,修改完成后提交到develop分支供qa测试,测试没问题后会新建一个release分支进行发布,发布后验证完毕没问题后就可以把release分钟的代码合并到master分支。hot fixes分支一般用于bug修复。
git log 可以确认本地仓库当前所在分支
绿色表示本地仓库当前所在的分支,红色表示这个分支提交到的远程仓库和分支,HEAD就表示仓库的默认分支
git branch --list和git branch 可以列出本地仓库全部的分支
*号后面的就是你当前所在的分支
git branch -a 可以列出本地和远程仓库的全部分支
git branch feature1 可以在本地创建新的分支
想在远程创建分支,可以通过git push代码提交的方式:
- git push 远程仓库名 本地分支名 ——> 在远程仓库创建与本地仓库同名分支并把分支代码提交上去
-
- git push 远程仓库名 本地仓库名:远程仓库分支名 ——> 在远程仓库创建新的分支名,并把代码提交上去
git checkout feature1 在本地切换分支
git checkout -b feature2
删除本地仓库的分支,使用命令:git branch -d <分支名字>
删除远程仓库的分支,需要使用git push的方式:
git push 远程仓库名 --delete 要删除的分支名
git log --all
使用上面的命令查看全部分支的提交历史记录,展示的不是很好看,可以使用git log --all --graph
切换到master分支,之后把feature1分支的内容合并到master分支上
验证下master分支是否新增了test.md文件
现在我想把feature2也合并到master分支
此时出现的代码冲突;
因为feature1和feature2都新增了test.md并书写了不同的内容,我们可以看下具体的内容冲突是什么:打开test.md
vi test.md
我们需求确认是保留谁里面的内容,把不要的那部分直接删除即可:
保存退出test.md即可。
- git push 远程仓库名 本地仓库分支名:远程分支名
-
- git push testHappy master:master
- 如果本地分支名和远程分支名相同,则可以写成:
- git push testHappy master
git官方:Git - Book
github: 快速入门 - GitHub 文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。