之前5年开发一直用SVN,操作也是属于傻瓜式操作。如今工作当中越来越多项目用GIT来进行版本管理。我们知道SVN属于集中式管理服务器。而GIT属于分布式管理服务器。。再SVN中。你一旦修改代码提交后。就会改动整个服务器上的代码。如果是小项目。或者需要内网研发的问题不大。如果团队开发人数较多。软件的版本较多。这种弊端就很明显。稍微一不小心。互相覆盖了或者删除了对方的代码。而GIT这种属于有多个分支。我们一般有发布分支。是主分支。而可以建立多个开发分支跟测试分支。大家互不影响。然后再自己的本地拉去远程的开发分支跟测试分支。写好代码测试完成。分别提交到远程的开发分支跟测试分支。最后发送pull request.由管理员决定谁的分支没问题进行合并请求的完成。下面是git命令行流程。GUI操作属于傻瓜式操作。大家主要了解下命令行操作。
1:步骤1:先去git上注册一个用户名跟密码.
2命令行操作git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
3:生成公钥私钥
ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/second_rsa
4:把~/.ssh-config/下面的second_rsa.pub里面的内容添加到git里面去.GIT网站登陆后有SSH配置公钥
5:然后再~/.ssh-config/config里面配置
Host cgx
HostName github.com
User [email protected]
PreferredAuthentications publickey
IdentityFile "C:\Users\THINKPAD\.ssh\cgx_rsa"
可以这样配置多个账户。模拟不同账户登陆git进行提交
6:连接测试
ssh -T git@cgx (Host后面的东西)
7:接下来实际git操作
cd e:
mkdir testGit
cd testGit
git init //先初始化git文件夹
git clone http://git.isecsp.com/xxx/contracts.git (这个网址需要你从git上面新建一个仓库,把远程git仓库克隆到本地仓库)
git add . //添加所有文件
git commit -m "添加的说明" //进入提交编辑模式
git push -u origin master //把我们本地master分支的代码提交到我们的远程仓库origin/master中
/显示简单信息
git log --pretty=short
//git log dirName 只会显示该目录下的提交
//git log fileName 只会显示该文件相关的日志
git log -p README.md //前后差别
//要查看当前提交与最新提交的差别
git diff HEAD
//确认完再git commit -m "红袜各位"
//创建,切换新分支
git checkout -b feature-A
//或者先创建分支,然后再切换分支
git branch feature-A
git checkout feature-A
//切换至上一个分支
git checkout -
//删除分支
git branch -D branchName
//删除远程分支
git push origin --delete branchName
//合并到主干分支
git checkout master
git merge --no-ff feature-A (如果合并有冲突,修改冲突文件重新add,然后commit)
//以图表形式查看分支
git log --graph
//回溯到创建feature-A分支以前
//要让仓库的HEAD、暂存区、当前工作树回溯到指定状态,需要用
//到git reset --hard (indexHashValue)。只要提供目标时间点的哈希值,
//哈希值在每个环境中各不相同,读者请查看自身当前环境中Add index 的哈希值,
进行替换。(git log --graph) 查看index的hash值
//查看当前仓库的操作日志 (git log命令只能查看以当前状态为终点的历史日志)
git reflog
//修改提交信息
git commit --amend
//一次完成2部操作
git commit -am "更改的信息"
//更改历史 修正的内容与之前一次的提交合并,在历史记录中合并为一次完美的提交
//可以选定当前分支中包含HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中打开
//修改第二个,把pick改成fixup
git rebase -i HEAD~2
//将它设置成本地仓库的远程仓库
cd git-tuorial
//把本地git仓库跟远程仓库关联
git remote add origin [email protected]:用户名/git-tuorial.git
//设置远端仓库
git remote set-url origin [email protected]:用户名/git-tuorial.git
//删除远程某个分支
git remote rm origin
//查看远程分支的版本
git remote -v
//修改当前分支名称
git branch -M master
//push之前先pull下来 ,origin是远程分支,master是你本地的分支
git pull origin master
//如果有冲突解决方案
git diff 冲突文件
vi 冲突文件 ,修改冲突
git add 所有摇提交的文件
git commit -m "xxx"
git pull origin master
git merge origin/master
git push -f orign master
//把本地仓库分支feature-D推送到远程origin分支
git push -u origin feature-D
git checkout feature-D
git pull origin feature-D
//合并远端master分支到本地feature-D分支
git merge origin/master feature-D
//合并远端feature-D分支到本地master分支
git merge origin/feature-D master
git push origin feature-D
//如果本地的分支跟远程的分支不一样,则指定本地和远程的分支的名称
git push origin localBranchName:remoteBranchName
例子
//这样是不对的.会再远端新建一个分支origin/feature-C.因为origin已经有这个路径了
git push origin master:origin/feature-C (把当前master分支推送到远端origin/feature-C分支上)
//正确做法
git push origin master:feature-C (把当前master分支代码提交到远端origin/feature-C分支上)
//当修改了本地master合并到远端feature-D分支,这是feature-D
(push之前修改了代码没提交这样做会直接覆盖本地分支feature-D.提交了再push会写入远端分支,而不会覆盖本地feature-D分支)
//跟master一样,但远端feature-D分支没变,需要
git add . git commit -m "" ,git fetch ,git merge origin/feature-C master
git push origin master:feature-C
//查看所有分支
git branch -a
//让仓库维持最新状态,
git fetch origin
git merge origin/master
本地分支同远程分支进行关联,可以分为以下2种情形:
情形1:本地已经创建了分支dev(以dev为例,下同),而远程没有
可以通过以下2种方法在远程创建分支dev,并与本地分支进行关联:
方法1: git push -u origin dev
方法2: git push --set-upstream origin dev
情形2:远程已经创建了分支dev,而本地没有
在本地创建分支并与远程分支进行关联,也有2种方法:
方法1分为两步:
step1:先将远程分支pull到本地 git pull origin dev
step2:再在本地创建分支并与之关联,又有2种方法
(1)git checkout -b dev origin/dev
(2)git checkout -b dev --track origin/dev #可以简写为git checkout --track origin/dev
方法2:可以在pull远程分支的同时,创建本地分支并与之进行关联
git pull origin dev:dev-------两个dev分别表示远程分支名:本地分支名
//查看remote地址,远程分支,还有本地分支与之相对应关系等信息
git remote show origin
//远程删除了分支,本地却还有分支解决方法
git remote prune origin