常识
git是软件,
github是网站:
添加ssh keys时,需要自己定义名称;
为什么要用github:代码比较丰富,功能齐全,横向强大
如何更改项目的gitignore:当创建新项目时,指定了语言类型,以后就不能修改gitignore了;只能打开gitignore,edit时,有了选项,可以修改。
coding是网站:
添加ssh keys时,可以从key中提取出名称;
为什么要用coding:国内稳定,纵向强大,可以演示
在remote中,采用git.coding.net域名;
代码管理快速入门:https://coding.net/u/coding/p/Coding-Feedback/git/blob/master/git-starter-tutorial.md
遇到的问题:
图形界面上传代码:git did not exit cleanly 命令行上传代码:fatal: unable to access 'https://git.coding.net/sfpw/test1.git/': Protocol https not supported or disabled in libcurl 删掉C盘下的libcurl.dll(E: ),之后图形界面上传代码也正常了。
每次push都需要username和password,是因为采用了https,解决办法是:
git remote rm origin git remote add origin git@git.coding.net:yuquan0821/demo.git git push origin
gitshell是网站:
跟github使用相同的ssh;
碰到的问题:别人的Darwin给我加了权限,我remote add origin git@gitshell.com或者git clone https://都不能成功;我pull或clone自己的仓库就可以。
解决办法:使用https的方式;.gitconfig/[credential]只有一个值;
原因:执行了多次:git config --global credential.helper cache导致
credential.helper有多个值
git clone时,不用git init;
github for windows:是window系统下github客户端,不过一般习惯用命令行(git bash)
在mac下,习惯用终端。
Windows英文版GitHub客户端使用操作流程图文攻略教程现没中文版 http://www.ihref.com/read-16514.html
Git版本控制软件结合GitHub从入门到精通常用命令学习手册 http://www.ihref.com/read-16369.html
廖雪峰git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
svn是集中式的,git是分布式的
mac:pwd:显示当前目录
版本控制系统 不能 管理二进制文件:图片,word。UTF-8编码最好
windows下不能用记事本编写代码
可以多次add,因为commit一次可以提交多个文件
git status:查看工作区的状态
git diff:查看修改内容
q退出git log
总结的图
接下来就剩5个板块了:创建,穿梭,origin,branch, tag
创建
mac:pwd:显示当前目录
mkdir learngit 创建文件夹
git init 初始化
版本控制系统 不能 管理二进制文件:图片,word。UTF-8编码最好
windows下不能用记事本编写代码
可以多次add,因为commit一次可以提交多个文件:git add readme.txt; git commit -m "add readme.txt",注释需要使用",而不能用'
穿梭
git status 查看工作区的状态
git diff 可以查看文件的修改内容
git log --pretty=oneline 查看历史记录,q退出
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id 或者 HEAD^或者HEAD~1。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
工作区就是当前目录
版本库(.git):stage(暂存区,add目的地)和master(HEAD,commit目的地)
每次修改,如果不add
到暂存区,那就不会加入到commit
中
reset HEAD是回退版本;checkout -- file撤销工作区的修改
git checkout -- file 撤销工作区的修改;修改三两种:一、add之前的操作;二、commit之前的操作。撤销到commit或者add时的状态;如果没有--,则为创建分支
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。处理撤销的第三种情况。
rm file 删除文件,接下来得情况:一、确定删,git rm file,git commit -m ""; 二、撤销删,git checkout -- file;
origin
在shell中find ~/.ssh 找到.ssh目录,里面有id_rsa和id_rsa.pub,前者是私匙,后者是公匙
关联远程库:git remote add origin git@github.com:path/test.git
第一次推送:git push -u origin master
以后推送:git push origin master
克隆:git clone git@github.com:sfp/test.git
git支持的协议:git://(ssh支持,快); https://(慢,每次必须输入口令)
branch
------------------------------------------------------------------------------
20150922创建分支
先在本地创建分支:git branch v2
然后切换到v2分支:git checkout v2
把本地的分支跟线上的分支关联:git pull -u origin v2
-----------------------------------------------------------------------------
开发一个新功能,创建一个分支,在自己的分支上干活,完成后,再一次性合并到原来的分支。
HEAD指向master,master指向提交
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b(创建并切换) <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>;-D强制删除
合并方式:FAST-forward,--no-off
什么情况会冲突?如果master和branch都修改同意文件,就会冲突。冲突后,手动删除。
查看分支合并图:git log --graph --pretty=oneline --abbrev-commit,如果不加--graph,则为查看历史操作
Fast Forward模式下,合并分支后,会删除分支信息;有时需要使用--no-off模式:git merge --no-off -m "" dev
修复bug时,创建一个master的临时分支
git stash:工作现场保存
git stash list:查找工作现场
git stash apply stash@{0}恢复;git stash drop(删除)
git stash pop(恢复并删除),应该也需要加stash{0}吧?
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
查看远程库的信息:git remote -v
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
创建远程origin
的dev
分支到本地:git checkout -b dev origin/dev
因此,多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
tag
git tag 查看所有标签
git show v0.9 查看标签信息
git log --pretty=oneline --abbrev-commit 查看历史提交的commit id
git tag -a v0.1 -m "" 368164
标签只存储在本地,所以只需在本地删除
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。先删除本地的标签
github
用自己的账号fork开源仓库,自己可以推送到fork后的仓库,pull request到开源仓库
忽略特殊文件
忽略某些文件时,需要编写.gitignore;
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
https://github.com/github/gitignore
配置别名
很有用,我先熟悉基本的命令,然后再用别名
重装系统后重装git
git for windows
配置环境变量: 找到git安装路径中bin的位置; 找到git安装路径中git-core的位置,加入系统变量的path中
生成ssh keys:在git bash中 git config --global user.name "lxyz";git config --global user.email "1129103472@qq.com";ssh-keygen -t rsa -C “1129103472@qq.com”,会看到密匙生成的 位置,添加到github
在仓库目录下git init之后再ssh git@github.com,而不能在任何地方都ssh git@github.com
ssh默认位置:C:UsersAdministrator.ssh
可在Git Bash下写命令
mac中git连不上,参考官方文档:https://help.github.com/articles/generating-ssh-keys/
20160819
win7连不上git:Could not create directory '//.ssh': No such file or directory
http://loftor.com/error/1/
场景:之前有个前端项目darwin,后来想改为后端项目,打算把之前的内容删了,再上传新的。
办法:新建一个文件夹,把之前的前端项目删了;再在后端项目中pull远程仓库上的空项目,然后再push。
删除文件夹:git rm -r js
git 团队协作的一些命令:http://www.linuxidc.com/Linux/2015-01/111999.htm
检测github 是否 正常连接:ssh -T git@github.com
对于一个新的文件夹,如果设置git?
git init
git remote add origin git@github.com:path/test.git
git pull origin master
git add *
git commit -m ""
git push -u origin master
问题
重装系统,安装git后,在cmd中,提示:不是内部或外部命令,也不是可运行的程序
解决办法:
3.1、找到git安装路径中bin的位置,如:D:Program FilesGitin 找到git安装路径中git-core的位置,如:D:Program FilesGitlibexecgit-core; 注:"D:Program FilesGit"是安装路径,可能与你的安装路径不一样,要按照你自己的路径替换"D:Program FilesGit" 3.2、右键“计算机”->“属性”->“高级系统设置”->“环境变量”->在下方的“系统变量”中找到“path”->选中“path”并选择“编辑”->将3.1种找到的bin和git-core路径复制到其中->保存并退出
github连不上了;
github部署静态页面
挺容易的:https://segmentfault.com/a/1190000002765287
需要自己把代码pull到本地,进行修改;默认访问index.html,不过可以自己增加路由,可以部署多个页面,还是挺方便的。
static static-1都是部署好的静态页面。
场景一:
github上没有gitignore,在本地添加.gitignore也可以 禁止某些文件的上传
场景二:
github上有branch develop,在本地新建branch develop,直接push就行。
场景三:
.gitignore文件需要 git add .gitignore 这样添加
提交到代码库的文件放在gitignore,也不会被忽略。
git fetch
应用场景:从github上获取所有的分支,而git pull会自动merge