您的位置:首页 > 其它

Git总结(1)—优势&安装&原理&本地操作命令&分支&协作&标签&自定义配置

2016-04-09 22:24 585 查看
最近发现一个项目手动保存了十几个版本,还远远没有结束的迹象。。。所以决定学学版本控制工具,首选当然是好评最高的git了,总结了些必要的命令和使用场景放上来

Git与SVN的区别
Git的安装
本地版本库(仓库)repository的创建和文件add、commit
工作区和暂存区Stage
Git命令之查看、回退、撤销、删除:
分支的意义 & 创建 & 切换 & 合并 & 删除
分支管理 & bug分支 & feature分支
多人协作常规操作&push失败操作
打标签
git的自定义配置:别名&忽略

1.Git与SVN(CVS的改进)相比的最大好处:不用联网,原因如下

Git是分布式的版本控制系统,工作组每个人的电脑都有完整的版本库,当然通常会选择一台充当所谓的“中央服务器”,只是为了方便交换各组员提交的修改(组员可能没开电脑)
SVN是集中式的版本控制系统,版本库是集中存放在中央服务器的,每次工作时,终端必须联网同步最新的版本库

2.Git的安装:

Linux:先输入git,看看安装没;如果没有,就sudo apt-get install git或者 yum install git(看你是那个版本了)
Windows:下载msysgit,它是Windows版的模拟环境和Git,下载地址:http://msysgit.github.io/,小白一路默认安装就行了

安装完成后记得进行初始配置如下:表示本机器所有Git仓库都用这个名字和Email,要想单独对某仓库做设置再百度吧

git config --global user.name "???"
git config --global user.email "???"

3.版本库(仓库)repository的创建和文件添加、提交:

定义:相当于一个目录,目录里所有文件都能被Git管理起来,增删都被跟踪,所以创建可以直接mkdir
TXT,网页,代码等的内容变化才能被跟踪,图片视频等二进制文件不能
git init 可以将当前目录初始化为Git可以管理的仓库,生成的 .git 目录就是用来跟踪版本库的,不要手动修改它
git add 【文件名】在仓库中添加文件,该文件必须存在于Git仓库中

git add . : add当前目录及其子目录下,所有被tracked且changes的文件或
.gitignore中没有且未被tracked的文件
git commit -m “change somethings”提交文件到仓库,-m 后面接的内容是本次提交的说明,即备注修改了什么

4.工作区和暂存区Stage

创建版本库时的目录就是工作区(Working
Directory),不包括 .git,.git是Git的版本库,其中有称为Stage的暂存区,还有自动创建的第一个分支master,以及指向master的一个指针HEAD
git add的文件进入stage,git commit之后才进入master分支

5.Git命令之查看、回退、撤销、删除:

git status:掌握仓库当前状态,比如哪个文件修改了,哪个文件add了但还没commit等
git diff 【文件名】:查看某文件修改(增删)了什么
git log:查看从最近到最远的提交日志,加上参数 --pretty=oneline ,可以只显示commit id和提交时的备注
git reflog:Git会记录你使用的每一个命令,用这个命令可以查看

git checkout -- 【文件名】:丢弃工作区的修改,即回到最近一次git commit 或 git add的状态;也能做误删回复,即本地误删了,从版本库里取回最近一次提交的该文件

git reset HEAD 【文件名】:撤销暂存区的修改,此时最近一次commit的master内容会覆盖暂存区Stage,如果还想丢弃此时工作区的修改内容,就是checkout了
git reset --hard HEAD^ :退回到上一个版本,HEAD是当前版本,^是上一个,^^是上上个,HEAD~10是往前10个版本 ;当然也可以用commit id 代替HEAD^,Git的commit id通常比较长,输入前几位就可以了
git rm【文件名:在版本库中删除文件,删除后也要git commit

6.分支的意义 & 创建 & 切换 & 合并 & 删除

在自己的分支下干活,到完成一个阶段性工作后,再合并到主分支上;这样既能为自己的工作提供版本迭代,又能不因功能实现一半就提交而影响别人工作
git checkout -b dev:创建并切换到dev分支:git branch dev 创建dev分支,再git
checkout dev
切换到dev分支;

git brance:列出所有分支,当前分支前有一个 * 号,git brance -d dev 删除dev分支
git merge dev:合并dev到当前分支

7.分支管理 & bug分支 & feature分支

------分支管理----------:

master分支只用来发布新版本,干活都在dev分支上,dev是不稳定的,发版本时dev合并到master上;;
每个组成员有自己的分支,平时都是向dev合并

git log --graph --pretty=oneline --abbrev-commit:查看分支合并图
git merge --no-ff -m "备注" dev:禁用Fast forward合并,merge后创建一个新的commit,“备注”就是用来描述它的;这样可以在log里能看到分支历史
------bug 分支----------:
git stash:保存当前工作状态,
git checkout -b issue-99:创建临时分支,用来修复bug,修复好后,git merge --no-ff -m "merge bug issue-99"
git stash pop:先checkout到原先工作的分支,然后用这个命令恢复工作状态并删除stash内容,相当于git stash apply恢复+git stash drop删除,git
stash list
查看工作现场位置
------feature 分支-------:
出现新功能,就新建一个分支git checkout -b feature-xx
要强行删除没有合并过的分支,git branch -D feature-xx

8.多人协作常规操作&push失败操作

[b]------常规的push和clone-------:[/b]

git remote:显示远程库名称,加 -v 可以显示可抓取fetch和push的origin地址
git push origin 【分支名】:把本地的某个分支推到远程库;除了 master和dev,其他分支都可以不与远程库同步
git clone git@github.com:username/repo-name.git:抓取分支,默认只能获得master分支;要获得dev分支,需要
git checkout -b dev origin/dev:要在本地创建与远程分支aiang
git config user.name "xxx"/user.email "xxx":clone下来之后配置一下name和emai
[b]------push失败的处理-------:[/b]
git pull:两个协作者同时提交,发生冲突,用这个命令抓取,手动合并,再add、commit、push
git branch --set-upstream 【分支名】 origin/【分支名】:如果提示本地分支和远程分支链接关系没有创建no tracking information,用这个命令关联

9.打标签

git tag 【标签名】:打标签,默认为HEAD,也可以在后面加上commit id
git tag -a 【标签名】 -m “标签信息”:指定标签信息
git tag:查看所有标签
git tag -d v1.0:删除本地标签v1.0,git push origin:refs/tags/v1.0:先删除本地,才能删除远程库
git push origin v1.0:推送标签v1.0,git push origin --tags:推送全部标签到远程库

10.git的自定义配置:别名&忽略

[b]------别名-------:.gitconfig[/b]
git config --global alias.ci commit:--golbal是全局设置的意思,这样设置,git ci就代替git commit
git config --global alias.last 'log -l':这样git last 就代表查看最近一次commit
git config --global alias.lg "log
--color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
:好吧这个才是我想说的,前两个只是举个例子,这样变态的偷懒方式才是程序猿应该做的
[b]------忽略-------:.gitignore[/b]
有些文件是编译产生的或者带有敏感信息的,不希望提交,那么可以在Git工作区根目录下创建.gitignore文件,记得 .gitignore 也要commit
https://github.com/github/gitignore 这个链接有现成的一些常用忽略项,组合、添加就可以用了,git
status看看之前Untracked files的提示还在不在,检验是否生效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: