GitHub的使用
创建分支:b1
git branch b1
查看所有分支
git branch
创建后master分支和b1分支指向同一个commit
但是当前分支还是在master分支上,HEAD指向master
如何切换分支?
git checkout b1 //切换后HEAD指向了b1
假如在b1分支上创建test文件并提交到仓库
touch test
git add .
git commit -m "commit test on branch b1"
git log --oneline --decorate
ll //工作区多了test文件
这样,b1分支指向了新的commit,master分支还是指向之前的commit
再切换到master分支:
git checkout master
ll //在master分支下,工作区没有test文件
/*
结论:在多人协同工作时,每个人创建一个分支,自己在自己的分支上工作,各个分支之间互不影响,每个人一个HEAD只能指向自己工作的分支
*/
此时,b1分支比master分支多前进了一步,现在让master分支也前进一步
git checkout master //切换到master
touch mm.txt
git add .
git commit -m "commit mm.txt on branch master"
现在两个分支master和b1都从同一个commit延伸出来一步,两个分支master、b1都能通过log向前找到共同的commit,
现在在这个commit上让他们进行合并:
git checkout master //先切换到主分支
git branch
git merge b1
git log --oneline --decorate
合并后master分支包括了之前b1的commit,master的commit,合并之后的commit
这是没有冲突的情况下,不报错
如果都对同一个文件做了修改怎么样
git checkout master
echo \'master\' >> a
git add .
git commit -m "modify a on master branch"
git log --oneline -- decorate
git checkout b1
git branch
echo "ttt" >> a
git add .
git commit -m "modify a on b1 branch"
有冲突的情况下合并:
git checkout master
git merge b1 //会提示失败。冲突了
vim a //里面会展示冲突的内容,需要手工处理
处理完后,
git add .
git commit -m "merge b1 to master both modify a"
// git commit -m "备注" 备注里写什么都行
删除分支,例如合并到主分支后需要删除别的分支
git branch -d b1
标签:一般命名为V1.0 V1.1等等,标签是也是指向commit的指针,用来标识一个commit
因为如果用ID来标识commit,那个ID是一串乱七八糟的字符串,看起来没有意义
git的标签的指针是不能变的,针对某次commit使用
先看看有哪些commit:
git log --oneline
不指定就是最后一次commit,执行后再输入描述信息
git tag -a v1.0
指定ID=aa27de7的commit打标签,执行后再输入描述信息
git tag -a v2.0 aa27de7
查看有哪些tag
git tag
查看v1.0标签的详细信息
git show v1.0
通过标签回到v2.0的commit状态
git reset --hard v2.0
拉取代码:
1.通过分支拉取
2.通过tag拉取
3.通过commit对象拉取,需要知道ID
———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
新建仓库时,暂时不选这个
1.登录GitHub
2.在GitHub上创建仓库
输入仓库名称"myrepo"
选择public还是private
点击创建
3.创建成功后有两种方式连接到仓库:HTTPS和SSH
4.可以将本地仓库推到GitHub公共仓库上,使用HTTPS的方式
//把本地和远程进行连接,"origin"是远程仓库的名称,可以随便命名,习惯命名为"origin"
//使用HTTPS要输用户和密码
git remote add origin https://github.com/revo666/myrepo.git
git remote
如果报错,提示\'remote origin already exists.\'就执行`git remote rm origin`
//本地仓库和远程进行同步
git push -u origin master
//Branch \'master\' set up to track remote branch \'master\' from \'origin\'.
5.使用SSH的方式
git remote add origin git@github.com:revo666/myrepo.git
git remote
ssh-keygen -t rsa //本地生成公钥和私钥
ll ~/.ssh/ //生成了两个文件
cat ~/.ssh/id_rsa.pub //把这个公钥内容复制进GitHub的SSHKey里
git push -u origin master //成功
6.GitHub的代码进行克隆
//克隆下来的仓库就自动添加了origin,修改完直接push就行
git clone https://github.com/revo666/myrepo.git
7.注意:
如果某人A克隆了一份,B也克隆了一份,B修改后进行提交,成功。
此时A把本地的内容进行修改,再提交,会提示失败。
因为本地分支和远程分支有区别,解决办法是把GitHub内容拉下来和本地进行合并在进行推送
拉取GitHub内容:
git fetch //拉取位置origin/master
git merge origin/master //合并
git push -u origin master //成功
总结:
用户A把仓库推上去了,B把clone下来,A修改后推上去了,B就推不上去了
因为GitHub和本地不一致了,需要把GitHub的内容fetch下来,跟本地master合并,
合并完了再推就行了
GitHub的特点:
多人协作时,每个人clone的时候都是向master上合并。
从GitHub拉代码和编辑完再推送代码步骤(只在master分支上操作):
1.登录GitHub,建仓库
2.设置远程GitHub仓库地址
3.把本地master推到GitHub
4.配置公钥,以后用SSH协议推代码都不验证身份
本地生成公钥私钥
5.打开公钥,设置到GitHub上
如果新来了一个员工只让他对参与的项目有权限,可以加在项目下:
6.修改本地Git配置,将HTTPS仓库路径改为SSH的路径
再推,就不需要认证了。
拉代码:
你拉完代码之后对代码进行修改(在master分支上),修改完了再推,可能会报错,与GitHub的master分支发生冲突
执行`git pull`命令将冲突的文件拉取下来(只拉冲突的文件,会把你的代码和冲突的代码放在同一文件中):
例如:
GitHub开发流程:
假如你正在coding,老板临时让你改一个bug,你怎样保存你手上的工作?
你可以选择将自己的分支推到GitHub,保持工作区干净,再去修改bug。(当然修改bug也要创建一个分支,修改完后合并到master,再将bug分支推到GitHub)
也可以选择git stash将工作区保存(了解,我只选择上面的方法)
如果有不需要git进行管理的文件(git不会推到GitHub),可以配置ignore文件。
官方已经把各个语言的ignore写好了,你只需要复制粘贴就行。
https://github.com/github/gitignore
在项目根目录下创建:.gitignore文件,把内容复制粘贴进去
怎样贡献源码?拿python举例
1.先把python源码fork到自己的账号下
2.修改源码
3.按提示一直下一步,点就行了,不需要配置,也不需要填什么东西