Git 随笔

Git简介

CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统(c语言开发)

所有的版本控制系统,只能跟踪文本文件的改动,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

使用Windows要特别注意:千万不要使用Windows自带的记事本编辑任何文本文件(会遇到很多不可思议的问题),建议下载Notepad++代替记事本

区别------------------------------------------------------

集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改。
安装-------------------------------------------------------------

在Linux上安装Git

$ git  (看看系统有没有安装Git)
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

像上面的命令,有很多Linux会友好地告诉你Git没有安装,还会告诉你如何安装Git。

如果你碰巧用Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。

老一点的Debian或Ubuntu Linux,要把命令改为sudo apt-get install git-core,因为以前有个软件也叫GIT(GNU Interactive Tools),结果Git就只能叫git-core了。由于Git名气实在太大,后来就把GNU Interactive Tools改成gnuit,git-core正式改为git。

如果是其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。

在Mac OS X上安装Git
如果你正在使用Mac做开发,有两种安装Git的方法。

一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。

第二种方法就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

在Windows上安装Git
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

开始操作

创建版本库----------------------------------------------------------
打开“Git Bash”

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit
(为了避免遇到各种问题,请确保目录名(包括父目录)不包含中文)

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

通过git init命令把这个目录变成Git可以管理的仓库

随便编写一个onegit.txt文件,内容如下:

this is a git

一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

$ git add onegit.txt

git add告诉Git,把文件添加到仓库

$ git commit -m "this is a git"

用命令git commit告诉Git,把文件提交到仓库
-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

常用命令------------------------------------------------------------------------------

git init    //初始化一个Git仓库
git status //仓库当前的状态
cat <file>//看文件内容
git diff //查看修改内容
git log //历史记录(--pretty=oneline)
git reflog //记录你的每一次命令
git diff HEAD -- <file>  //查看工作区和版本库里面最新版本的区别:

vi 进入vim编辑器
在命令模式下:
ZZ/:wq 保存修改并且退出 。
:w 保存
:q! 回车后放弃修改并退出。
o,i,a都可以进入输入模式,

删改后退

管理修改------

git add <file>  //注意,可反复多次使用,添加多个文件;(实际上就是把文件修改添加到暂存区)
git commit -m "提交的说明"  //完成。(实际上就是把暂存区的所有内容提交到当前分支)

版本回退-------

git reset --hard HEAD^  历史之间穿梭  HEAD表示当前版本(上一个版本就是HEAD^,上上一个版本就是HEAD^^/HEAD~100)

撤销修改-------

git checkout -- <file>  把<file> 文件在工作区的修改全部撤销(回到最近一次git commit或git add时的状态)(错误在工作区,没添加到)
git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新放回工作区:(错误添加到暂存区,先reset 再checkout)

删除文件-------

git rm  用于删除一个文件

配置别名

$ git config --global alias.st status     st就表示status

使用Github

添加远程仓库----------------------------------------------------------------

git remote add origin git@github.com:1367205279/repo-name.git  //关联一个远程库
git push -u origin master   //第一次推送master分支的所有内容
git push origin master   //推送最新修改

//fatal: remote origin already exists.(报错远程起源已经存在。)
git remote rm origin 删除关联
git remote -v 查看仓库地址

远程库克隆------------------------------------------------------------------

git clone git@github.com:13672052792/repo-name.git  克隆一个本地库

分支控制

分支--------------------------------------------------------------------------

git branch   //查看当前分支
git branch <name> //创建分支
git checkout <name>   //切换分支
git checkout -b <name>   //表示创建并切换分支(git switch -c dev)
git branch -d <name>  //删除分支  (-D强行删除)
git merge <name>   //合并指定分支到当前分支
$ git merge --no-ff -m "merge with no-ff" dev(强制禁用Fast forward模式)
--no-ff //参数就可以用普通模式合并,合并后的历史有分支

当Git无法自动合并分支时,就必须首先解决冲突,手动编辑再提交

git log --graph --pretty=oneline --abbrev-commit  //分支合并图

bug分支处理

git stash //把当前工作现场“储藏”起来,等以后继续工作
git stash list //查看储藏了的工作
git stash apply //恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;(git stash apply stash@{0})
git stash pop   //恢复的同时把stash内容也删了:
cherry-pick <commit>  //把bug提交的修改“复制”到当前分支,避免重复劳动。

多人协作
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

git rebase 可以把本地未push的分叉提交历史整理成直线;看历史提交的变化时更容易

标签

git tag <tagname> //新建一个标签
git tag -a <tagname> -m "blablabla... //指定标签信息;
git tag //查看所有标签。
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值