版本管理GIT

来源:互联网 发布:应聘软件测试工程师 编辑:程序博客网 时间:2024/05/19 11:48

描述:查看GIT版本分支,回溯代码

基本命令回顾:

git init

git add file   //该命令可以将文件添加进跟踪文件,也可以将修改的跟踪文件放进暂存区

git status

git commit -m "提交说明"


初始化干净仓库:

project目录下初始h化仓库并提交后

git clone --bare ./project  new.git


首次推送服务器:

采用SSH协议

scp -r new.git root@192.168.0.6:/my/git/new.git


修改提交:


通常修改一个文件后:

git add file

git commit -m 这样进行提交

git commit -a 更新并提交


修改最后一次提交:功能,本次提交漏掉文件,或提交信息错误需要重新提交时

git commit -m

git add new_file

git commit --amend  

//合并为一次提交


标签:标签是当前commit的对象指针

查看标签:

git tag


新建标签:

git tag -a tag -m 'information'

补打标签:为以前提交的快照补上标签

git tag v1.0 xxxxxxx(哈希值)


标签是本地化操作,所以要推上服务器需要:

git push origin V1.0

推送所有标签(增补标签):

git push origin --tags


推送标签等同于推送指向的commit对象。



查看提交日志:

git log

git log -p 2


比较文件与暂存文件区别

git diff file


远端仓库操作:


克隆源码:

git clone  root@192.../../../new.git //当前目录 名字默认为new


显示远程仓库:

git remote -v


添加远程仓库:

git remote add name git://

git remote add name root@192...

//name为新的远程仓库名,和origin一样


推送服务器:

git push origin master


拉取数据:

git fetch name

//会抓取上次克隆或fetch以来,所有更新的数据

//拉取到本地为一个新的分支,需要手动合并


拉取数据并合并:

git pull name

//会自动合并到当前分支,在只有一个分支的情况直接直接拉取即可

//若是多分支,还要设定本地分支跟踪远端具体哪个分支,才能实现合并。

//git clone 的本质就是初始化一个本地master分支并跟踪远程master分支。


分支操作:


创建分支:

git branch is01


切换分支:

git checkout is01  

git checkout -b is01//创建并切换


分支合并:

git checkout master

git merge is01 //将01合并到吗master


跟踪分支:

首次从远端拉取新分支后,在本地也不能操作该分支,比如拉取的远程分支为origin/fix

本地只能有两个选择:

1.合并到本地当前分支

git merge origin origin/fix

2.创建一个新的分支fix,在刚拉取的分支基础上

git checkout -b new_fix origin/fix

git checkout --track origin/fix



版本回溯:

本地回溯到上一版本:即git commit 之前

git reset --soft HEAD^   //HEAD是当前commit对象,^表示其父对象


回溯到暂存文件之前:即git add之前

git reset -q file

此时回到了修改未暂存阶段


回溯到上一版本,并且添加的文件不保存

git reset --hard

注意这个是硬回溯,当前改动的代码是不会保存的。


回到更以前的版本

git reset --soft HEAD^^

git reset --soft SHA值

 

git branch and merge.

分支:

在GIT初始化仓库时,创建的分支为master,在初此提交时

会创建一个committer指针,指向当前提交对象的文件快照,以哈希值来区分

当再次提交时,提交的对象会包含一个指向上次提交对象的指针(parent).

所谓分支就是指向commit对象的可变指针,每次提交后,都指向最后一次提交的

commit对象。

分支的创建:

:git branch name...

这会在当前commit上新建一个分支,与主分支master一样指向同一个commit对象,

这里需要一个HEAD指针,来区别当前工作的分支,HEAD指向当前工作的分支,

切换分支:

:git checkout name...


如果在新的分支进行了提交,此时的分支指向新的commit,而原来的master指向为提交前的

commit。故回到主分支时,git checkout master.文件内容回到了master所指向的快照

内容,此时又可以在此基础上开发另外的内容。


当回到master分支后,代码推进了又再次提交,此时等若产生了新的分支。

此时的master和name...分支是一种平行关系,父commit都来自未创建分支的快照对象。


合并:

在新的分支提交以后,确保代码稳定后,需要合并到主分支

:git checkout master  

切换回主分支

由于新的分支的父对象是master。即name 分支是master分支的下游,此时合并

:git merge name ... 

这部称fast forward,只是简单的将master分支向前推进。指向了新分支的commit.

这是因为没有什么分歧。现在可以删除新的分支

:git branch -d name...


合并提交:

祖先不止一个的情况,以三方合并计算做合并策略


冲突合并解决:

在不同的分支修改了统一文件的同一部分。

分支管理:

git branch  //所有分支

git branch -v //各个分支最后一次commit信息

git branch --merge/--no-merge  //已经合并的分支/相反。


分支未合并会失败,当然也可以强制删除-

 

原创粉丝点击