git的学习

之前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

你可能感兴趣的:(git的学习)