git 常见的使用方法

git是一个分布式版本控制系统,主要用于多人代码开发协作。

首先本地安装git bash 工具,以命令行方式管理项目,windows 安装git 参见官网:https://git-for-windows.github.io/

1、工具安装完成后,开始在本地建立一个版本库(repository),命令行cd 到版本库的根目录比如 d/gitRepository ,初始化git 版本库:git init

2、在该目录下创建一个文本文件 read.txt, 依次执行2个命令 : 

【 git add read.txt】(作用:把文件添加到本地版本库中的暂存区中)

【  git commit -m 'add file read.txt ' 】(作用:吧已经添加到暂存区中的文件一次性提交到当前分支(PS: 默认分支为master)中)

注意git commit 应该加上-m 参数,它的目的是对修改的文件做有意义的备注或者注释,如果不加-m 就不能提交修改的文件,并会出现如下错误:

Aborting commit due to empty commit message.

3、如果现在更改本地文件read.txt 内容,在没有git add 和git commit 的前提下,git status 查看本地文件是否与版本库中的文件同步, git diff read.txt 可以查看本地文件与版本库中的文件差异在哪里。

4、回退版本:

git 的版本号不像svn那样1 2 3依次递增的版本号,git 的版本号是利用SHA1计算出来并且用十六进制表示。为了看到当前分支中都做了那些版本变动,利用git log查看。

git 以HEAD 表示最新版本,HEAD^表示上一个版本, HEAD^^表示上一个版本的上一个版本, 以此类推, 比如想要返回前100 个版本,那么写法是:HEAD~100

回退上一个版本命令: git reset --hard HEAD^ 

这时校验下你本地的read.txt文件是否回退到 你的上一个版本内容,然后 git log 查看下版本变化看到之前的最新版本注释不见了,如果还记得之前最新版本的版本号commit id 前几位可以 git reset --hard 4ee5d5f 可以看到又回到了之前的最先版本,但是如果不记得之前最新版本号commit id怎么办? 执行:git reflog 可以看到之前所有的commit id,然后根据注释内容 可以回退到任意版本git reset --hard <commit id>。commit id 如图标示:


5、git init 创建版本库是,git 会自动为我们创建唯一一个master分支,所以每次git commit 都是默认网master分支上提交。

6、为什么每次更新版本库需要git add 文件? git 有暂存区这一概念 ,每次git add 之后是将修改的文件添加到暂存区,git commit 则是一次性将暂存区中修改的文件合并到master的版本库中。比较 暂存区与本地文件的命令:git diff readme.txt  比较版本库中最新版本文件和本地文件的命令:git diff  HEAD --  read.txt

7、如果在工作区修改了某个文件,修改的东西又是生产环境上不需要的,但是自己又记不清文件原来的内容,那又如何恢复?利用git checkout -- read.txt 将工作区文件与版本库中的文件同步。再比如,工作区不但修改了文件,而且git add read.txt 提交到了暂存区,这先将暂存区修改的部分还原本来面目:git reset HEAD read.txt  , 执行它之后,就相当于第一种情况:只改了工作区,而没有修改暂存区,所以执行这种情况的命令:git checkout -- read.txt

8、删除文件:先删除本地文件rm -f readme.txt ,然后将本地工作区变化提交暂存区:git rm readme.txt ,最后提交版本库:git commit -m 'delete read.txt'

9、从远程托管服务器中拷贝项目:git@github.com:drewjhung/learn_git.git

10、创建分支。创建分支有什么用呢?我们都知道git 有个默认分支master,如果在开发期间,团队所有的人都要提交到master分支上,但是可能某个成员A 只完成项目的1%,而且代码不完全,别人从master pull 的时候可能使得别人本地报错,导致master分支代码及其不稳定。因此,自己先创建个dev 分支,然后全部完成后,将Dev分支的完整的代码merge到master上,最终形成一个稳定版本的版本库。

创建一个名为dev的分支并切换到该分支上:git checkout -b dev,这个命令其实分为两步:创建分支git branch dev;切换到dev分支下工作:git checkout dev.使用git branch 查看当前分支 ,分支前加 * 符号的为所在的当前分支。在dev分支下全部开发完成后,要合并到稳定版本的master分支上:git merge --no-ff -m 'merge dev' dev 对该命令参数部分解释下:首先这个命令也是做了2步操作先合并,然后一并提交到master分支版本区中。--no-ff 在这里ff全称为fast-forward,如果不加这个参数,合并分支的时候会以fast-forward 模式合并,这样会导致master分支的合并日志(信息)丢失,为什么这么说呢?我们知道git可以回退版本,而回退版本一个重要依据是从git log 中取得我们想要的commit id ,比如我想恢复到从dev分支上合并的那个版本,如果你在dev 分支没有使用参数 --no-ff -m 那么很不幸,本次合并并没有commit id,从而也不能准确回退版本。添加这2个参数后,git log 会准确记录每次merge 之后的log。如果成功合并到master分支后,可以将dev分支删除:git branch -d dev.  利用git log --graph --pretty=oneline 查看分支合并图。

11、查看远程库信息:git remote,如果查看更为详细的内容:git remote -v

12、多人开发,难免会遇到合并的时候出现冲突,那么应该修改本地冲突后在提交合并。比如从远程库上拷贝到本地后,开始自己建立分支开发,合并到master之后可以将最新版本push 到远程master 分支上:git push orgin master。如果你的团队中某个成员A 要同你合作开发一个项目,他要先从远程库上copy 一个项目,然后在分支dev上开发,但是git@github.com:drewjhung/learn_git.git之后,git  默认当前分支在master上,不信?你可以查看下当前分支git branch。这时候,成员A 需要在本地新建一个dev分支,同时将本地dev分支和远程库上的dev 分支联系起来,目的是push 新文件时候,正确push 到远程库的dev分支上。本地新建分支并联系到远程的dev 分支:git checkout -b dev origin/dev。如果成员之间同时操作一个文件,造成collision,这时候需要将远程文件拉到本地 git pull 但是可能会出现错误:There is no tracking information for the current branch. Please specify which branch you want to merge with.这个错误是当前 分支dev 没有 远程dev 建立联系,利用git branch --set-upstream-to origin/dev dev建立联系。然后再次尝试git pull,把文件拉下来之后,修改冲突,然后commit and push到远程库。

13、创建标签。git 标签相当于版本的快照。新建某个版本标签:git tag v1.0 这个命令是将本次最新的commit id 作为v1.0的快照,如果想要将之前某个时期的版本做标记怎么办?利用git log查看之前的commit id, 命令类似:git tag v0.2 0469b229该命令意思是将commit id前几位为 0469b229的版本快照作标记为v0.2

删除标签 git tag -d v0.2, 将某个标签的版本push 远程库git push origin v1.0, 删除远程库的标签:git push origin :refs/tags/v1.0

14、忽略某些特殊文件。比如java 编译后会有.class 文件,但是他可能就存在本地工作区内不能删了它,但是又不想提交这些class文件,如果不提交每次git status 的时候总是不能出现‘nothing to commit, working directory clean’ 这样让人愉悦的提示,所以,git 利用.gitignore文件忽略不需要提交的文件。在工作区根目录下新建.gitignore文件,文件添加需要git 忽略的文件,同时将.gitignore 文件push 到远程库,大功告成。

15、配置git 服务器。在不同的Linux 内核版本上安装git server :https://git-scm.com/download/linux

我本地Linux环境为red hat, 

I)、下载安装git server:yum install git

II)、新建一个git 用户: adduser git

iii)、创建证书:将所有可以访问git 服务的公钥key 添加到/home/git/.ssh/authorized_keys文件中

IV)、初始化服务器上的git 仓库: git init --hard drew.git使用该命令后,使得你每次push 的文件在该版本库看不到,但是它真实存在。

V)、将初始化后的drew.git 的所有者ower改为git :chown -R git:git  drew.git,同时处于安全考虑不允许用户使用shell 存取版本库:

git:x:502:502::/home/git:/usr/bin/git-shell

OK ,现在可以clone你的版本库,并且push 到此远程库上,操作同以前一样。

git 学习暂时告一段落,多谢廖雪峰老师git教程!


参考资料:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值