赞
踩
1) Git和SVN是我们最常用的版本控制系统(Version Control System, VCS)
2) Git三大区域的划分(详见下文Git基本原理)
3) 版本库状态
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着可以把我们的工作从开发主线上分离开来,以免影响开发主线
分支是一个代码的副本;个人在开发时,拉出一个分支用于个人功能开发,在这个分支上的所有操作都不会影响到其它同事的工作,当个人功能开发完成后,可以将功能合并到最新项目中
1)master:主分支
默认生成,用于保存对外(向用户)发布的版本
2)dev:开发分支
为了保持主分支代码的稳定性,开发工作不在主分支进行,而是在dev分支进行
3)feature:个人功能开发分支
多团队基于dev协作,为了保持开发的稳定性,每个人在开发自己的功能时应该基于dev分支拉出一个自己的分支,当开发完成后合并到dev分支
4)hotfix:个人修改bug分支
当修改bug时,每个人应该基于dev分支拉出一个自己的修改bug分支,当修改完成后合并到dev分支
Workspace:工作区
Index/Stage:暂存区
Repository:版本仓库区(本地仓库)
Remote:版本仓库区(远程仓库)
// 查看状态
git status
1)红色:表示文件在当前工作区中(Workspace),未加入版本控制
2)绿色:表示文件已经添加到暂存区(Index/Stage),已加入版本控制,暂未提交
3)白色:表示文件已经提交到本地仓库(Repository),已加入版本控制,已提交,无改动
4)蓝色:已加入版本控制,已提交,有改动
1)结束代码编写后,首先查看状态,发现文件都是红色,表示文件在当前工作区中
git status
2)把当前分支工作区内容添加到暂存区
git add .
3)再次查看状态,发现文件变为绿色,表示文件已经全部添加到暂存区
git status
4)把暂存区内容提交到本地仓库,发现文件变为白色
git commit -m "描述说明"
5)查看当前分支
git branch
6)切换分支到主分支master
git checkout master
7)合并本地分支到master主分支中(本地仓库)
git merge 本地分支
8)将本地仓库主分支master代码推送至远程仓库主分支master(远程仓库)
git push origin master
新建一个文件夹,用于存放公司项目;进入该文件夹后右键Git Bash,执行
// 将此目录作为本地仓库(初始化git)
git init
进入本地仓库后右键Git Bash,执行
// 下载远程master分支,并且本地分支名字为master
git clone Http地址(项目URL)
// 下载指定远程dev分支,并且本地分支名字为dev
git clone -b 指定分支(dev) Http地址(项目URL)
执行git clone xxx
后会发生什么?
1)Git会自动为你将远程仓库命名为origin,并下载其中所有的数据到本地
2)在本地建立所有远程存在的分支,并且命名为origin/xxx,例如远程分支有master、develop,那么本地就会建立origin/master分支、origin/develop分支,并且它们都是处于remotes目录下,是隐藏的。使用命令git branch -a就可以看到隐藏目录remotes,结果显示为remotes/origin/master以及remotes/origin/develop
3)接着,Git会继续建立一个属于你的本地master和develop分支,位置和远程origin/master、origin/develop分支处于相同的位置,这样,我们在本地仓库的本地分支和远程分支就都有了,并且始终在同一位置
打开自己项目的目录,右键Git Bash,执行
// 创建分支(基于当前分支创建)
git branch my_dev
// 选择分支
git checkout my_dev
// 创建并选择分支,以上两条可合并为
git checkout -b my_dev
修改代码,提交到本地分支(my_dev),并Push到远程仓库
// 将所有未添加到暂存区的文件添加到暂存区;添加单个文件到暂存区:git add 单个文件名
git add .
// 提交到本地仓库
git commit -m "描述说明"
// Push本地分支到远程仓库(推送自己的修改):若推送失败,先git pull更新
git push origin 分支名(my_dev)
合并本地分支(my_dev)到指定分支(dev),并Push到远程仓库
// 切换到指定分支
git checkout dev
// 更新指定分支(拉取最新代码),多人修改时适用
git pull origin dev
// 将本地分支合并到指定分支(指定分支为当前分支dev),不能在被合并的分支上使用该命令
git merge my_dev
// Push指定分支到远程仓库(此时dev是最新的)
git push origin dev
// 查看当前本地分支
git branch
// 查看当前远程分支
git branch -r
// 删除本地分支
git branch -d my_dev
// 删除远程分支
git push origin -d dev
// 重命名本地分支
git branch -m old_name new_name
// 查看提交历史记录(包括commitID、作者、提交事件、提交信息)
git log
// 查看版本差异:查看本地dev与远端origin/dev的版本差异
git log -p dev..origin/dev
// 版本回退:将版本重置到某个commit
git reset --hard commitID
// fetch(提取):从远程分支提取最新版本到本地分支(不会自动合并)
git fetch origin dev
// pull(拉取):从远程分支拉取最新版本到本地分支(会自动合并)
git pull origin dev
// 查看远程仓库信息
git remote -v
// 新建分支并和远程分支进行关联
git checkout -b "new branch" origin/"new branch"
// 本地分支与远程分支进行关联(需先切换到本地分支)
git push -u origin/remote-branch
// 本地仓库关联远程仓库
git push --set-upstream origin master
// 撤销工作区修改:使用版本仓库中的文件或暂存区中的文件替换工作区的文件,让文件回到最近一次git commit或git add时的状态
git checkout -- "文件名"
// 补充操作:
// 1)初始化
git config --global user.email "your email"
git config –-global user.name "your name"
// 2)秘钥
// 查看是否存在秘钥:id_rsa是私钥;id_rsa.pub是公钥;id_rsa.pub是需要上传到github的SSH KEY
ls -al ~/.ssh
// 3)生成秘钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
// 4)已创建本地仓库,未创建远程仓库
// ① 初始化:git init ② 移除原有的origin:git remote rm origin ③ 添加你的远程仓库(SSH地址):git remote add origin "your remote repo" ④ 更新本地仓库:git pull ⑤ 首次推送与远程仓库建立关联,以后直接git push即可:git push --set-upstream origin master
多个用户在相同的版本上对同一文件进行了修改操作
1) 对同一文件的不同行进行了修改
Git会自动合并多个用户对不同行的修改
2) 对同一文件的相同行进行了修改
// 第一步:拉取远程分支
git fetch origin dev
// 第二步:将本地分支合并到远程分支
git merge my_dev
// 第三步:修改冲突,标记已解决
git add .
// 第四步:提交修改到本地仓库
git commit -m "描述说明"
// 第五步:Push本地分支到远程仓库
git push origin my_dev
// 注意:
// 如果第2次需要修改本地分支,需要先切换到本地分支,然后才能修改文件;否则会默认在远程分支中修改(因为上面的步骤切回了远程分支)
3) 对同一文件的相同行和不同行都进行了修改
对于不同行,Git会自动的合并
对于相同行,采用方式2)即可
定义:把一个项目中所有分支等(Git仓库)完整的迁移到另一个仓库地址
步骤:
// 方式1:
// 1)右键Git Bash,以bare的方式克隆原仓库镜像到本地
git clone --bare 原Http地址(原项目URL,如https://github.com/old-repository.git)
// 2)进入本地仓库
cd 仓库名称(如old-repository.git)
// 3)将镜像Push到新仓库地址
git push --mirror 新Http地址(新项目URL,如https://github.com/new-repository.git)
// 4)删除原仓库
cd ..
rm -rf 仓库名称(如old-repository.git)
// 方式2:
// 1)右键Git Bash,克隆原仓库镜像到本地
git clone --mirror 原Http地址(原项目URL,如https://github.com/old-repository.git)
// 2)进入本地仓库
cd 仓库名称(如old-repository.git)
// 3)将仓库中原来的远程地址改为新仓库地址
git remote set-url --push origin 新Http地址(新项目URL,如https://github.com/new-repository.git)
// 4)将修改后的Git镜像仓库Push到新仓库
git push --mirror
// 5)删除原仓库
cd ..
rm -rf 仓库名称(如old-repository.git)
1).gitignore
文件
// 在git工作区根目录下创建.gitignore文件,将需要忽略的文件名写进去,git就会自动忽略这些文件
// 若.gitignore文件是后续添加的,需要先清除.idea的git缓存:
git rm -r --cached .idea
2) Git配置文件
git配置文件放在 ~/.gitconfig
因使用软件的不同而操作不同
IDEA集成Git版本控制相关操作见:传送门
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。