git

常识

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

总结的图

git

接下来就剩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分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

创建远程origindev分支到本地: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