文章目录
是什么
git:分布式版本控制软件
历史发展
文件(多文件) => 本地(单文件) => 集中式版本控制 (可协作开发 SVN)=> 分布式版本控制(集中式挂掉了,不影响单独的操作)
为什么
方便回滚,获得以前的版本
怎么做
- 进入要管理的文件夹(进入)
- 初始化(提名)
- 管理
- 生成版本
常用命令
-
初始化仓库
git init
-
查看文件的状态
git status
-
把文件添加到暂存区
git add 文件名 添加单个文件 git add . 添加所有文件
-
把文件添加到本地仓库(第一次提交可能需要配置你的邮箱和用户名,根据提示简单配置就行)
git commit -m "提交信息"
-
查看提交版本的信息
git log git log --graph --pretty-format:"%h %s"//记录图形展示
-
回滚到任意版本(通过git log可以查看版本号的信息在commit后面的一串数字)
git reset --hard 版本号
- 文件回到未修改之前,从红色部分到原来的部分
git checkout -- 文件名
- 将缓存区的代码回到工作区(与 git add 命令相反)
git reset HEAD 文件名
分支
- 创建分支
git branch //查看分支
git branch 分支名 //创建分支
- 切换分支
git checkout 分支名
git checkout -b 分支名 //创建分支,并进入分支
- 合并分支(首先要切换回你要合并到的分支(例如你要讲dev分支合并到master分支上,你首先的切换到master分支上))
注意:合并分支的时候可能产生冲突,找到冲突,保留一方代码,重新提交就行
git merge 分支名(需要合并的分支)
- 删除分支
git branch -d 分支名称
远程
- 给远程仓库起别名(只提添加一次就行)
git remote add origin 远程仓库地址
- 将代码推送到远程仓库
git push -u orgin 分支名称
-
克隆远程仓库的代码(第一次拉代码)
注意: 此处克隆下来的代码,和远端的代码一样,分支数目也一样,但是你通过git branch查看分支的时候,只能显示master,但是你分支真是存在,你可以通过git checkout 分支名 进行分支的切换。
git clone 远程仓库的地址
**注意:**在不同的地方开发:开发前先拉取代码,写完代码后,记得提交代码(没有提交前,一定不能拉取代码,不然你写的代码就被覆盖了,而且找不到)
- 克隆代码后,你首次切换进入dev分支进行开发
//将master分支的代码合并到dev(仅执行一次)
git merge master
- 拉取代码
git pull origin 分支名
- pull的等价命令
//以下两行代码相当于 git pull origin
git fetch origin dev //将远程仓库的代码拉到本地仓库
git merge origin/dev //将本地仓库的代码拉到工作区
rebase(变基)(实践中需重看)
- 作用:使git记录变得简洁(多个记录,变成一个记录)
git rebase -i HEAD~3 (注意这里是波浪号,不是短横线) //找最近的三条记录进行合并
git rebase -i 版本号 //将最新记录一直回溯到你写的版本号的记录进行合并
将pick改成s,:wq保存并退出修改
注意:合并记录不要合并已经push到远程仓库的记录
- 将分支中的提交记录,合并成一条分支(不注重里面的细节)
//切换到dev分支
git checkout dev
//将master的记录变基到dev上
git rebase master
//将dev合并到master中
git checkout master
git merge dev
- 早上提交提交完代码没有push,晚上开发新功能,第二天pull代码,提交记录会产生分支,使用rebase可以不产生分支
git fetch origin dev //将远端的代码拉到本地仓库
git rebase origin/dev//将本地仓库的代码合并到dev分支,但是提交记录不会产生分支
注意:使用git rebase过程中可能会产生冲突,解决完冲突后需要执行(不许要特意去记,产生冲突后报错,报错信息中会有提示)
git rebase -- continue
快速解决冲突
1.安装Beyond compare软件
2.在git中配置
git config --local merge.tool bc3
git config --local mergetool.path 'user/local/bin/bcomp'(这是安装软件的路径)
git config --local mergetool.keepBackup false //不保留备份文件
3.应用beyond compare 解决冲突(适用冲突比较多的时候)
git mergetool
多人协作开发
- 为提交重命名为tag(取代版本号)
git tag -a v1 -m "第一版"
git push origin --tags
- 给开源软件贡献代码
1.fork源代码(点击fork就行)
将别人的源代码拷贝到自己的远程仓库中
2.修改自己仓库的代码
3.给源代码的作者提交 修复bug的申请(pull request)
配置文件
- 项目配置文件: 项目/.git/config
git config --local user.name 'xxx'
git config --local user.email 'xxx'
- 全局配置文件 : ~/.gitconfig
git config --global user.name 'xxx'
git config --global user.email 'xxx'
- 系统配置文件: /etc/.gitconfig
git config --system user.name 'xxx'
git config --system user.email 'xxx'
需要root权限
免密登入
- url体现
原来的地址: https://github.com/justtoday/shop.git
修改后的地址:https://用户名:密码@github.com/justtoday/shop.git
git remote add origin https://用户名:密码@github.com/justtoday/shop.git
git push origin master
- ssh实现
1.生成公钥和私钥(默认放在~/.ssh目录下,id_rsa.pub公钥,id_rsa私钥)
ssh-keygen
2.拷贝公钥的内容,并设置到github中
3.在git本地中配置ssh地址
git remote add origin git@git.code.tencent.com:sr-lining/fe/lining-wx.git(注意这里的地址是ssh的不是https的)
git push origin master
- git自动管理凭证
git忽略文件
- .gitignore(让git不管理的文件)
在gitignore文件中
*.h //忽略.h结尾的文件
!a.h
.gitignore
files/ //files文件夹下的文件
任务管理
- issues,文档及bug管理
- wiki 项目文档说明