git实践-基础使用

Git实践

git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。

git最初的开发动力来自于BitKeeper和Monotone。git最初只是作为一个可以被其他前端(比如Cogito或Stgit[8])包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制。很多著名的软件都使用git进行版本控制[,其中包括Linux内核X.Org服务器OLPC内核等项目的开发流程。

------来自wiki

使用的实践的前提是,本地安装成功git,即:

使用 git --version命令可以获得版本号
git version 2.26.2.windows.1

Git的三种状态和三个阶段

三个状态:

  • 已提交(committed)

表示数据已经安全的保存在本地数据库中。

  • 已修改(modified)

表示修改了文件,但是还没保存到数据库中

  • 已暂存(staged)

表示对一个已修改的文件当前版本做了标记,使之包含在下次提交的快照中。

三个阶段:

工作区、暂存区以及git目录

工作区,显而易见是在进行文件操作时需要的缓存区域,能够方便使用和修改,其中的文件是从git仓库的压缩数据库中提取出来的。

暂存区(索引)的理解是,一个保存了下次要提交的文件列表信息

git仓库就是git存储项目的元数据和对象数据库的地方。

本地玩转Git

本地尝试功能包含:初始化git仓库,查看和配置本地信息(用户名,邮件是必要配置),添加文件追踪,查看仓库状态,提交事务以及备注,分支操作等。

基本配置
  1. 初始化仓库

    git init
    
  2. 配置用户名和邮件

    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com
    # 查看配置, --list 可以查看
    git config --list --show-origin
    git config user.name
    
  3. 添加文件

    # 主要使用.和*进行匹配
    git add .  # 将所有目录下的文件进行跟踪
    git add *.txt
    

    添加文件后git会对添加文件进行追踪,追踪的参数包括修改,删除。

    进行这些操作后可以查看仓库的状态。

    添加文件时出现:LF will be replaced by CRLF 警告时:

    使用:git config --global core.autocrlf false即可去除警告。

  4. 查看仓库状态

    git status
    git status -s 获得更简洁的报告
    

    A 表示被追踪的文件

    M文件被修改,

    ??新添加的未跟踪的文件

    两个占位,左栏暂存区,右栏工作区(需要commit后才能有工作区)

  5. 提交版本

    git commit -m ‘message’
    

    如果不添加 -m参数在win上会弹出安装时选择的文本编辑器进行提交信息的编写

  6. 获取帮助

-h命令,,git 子命令查询如 git add -h

  1. 获取提交历史

    git log
    

    log信息会按照提交时间的先后列出,信息包含commit,Author,date和每次提交的备注信息。

    主要的参数包括 -p/–patch -num(定义显示最近的几条数据)

    –stat:可以看到每次提交的改动信息的统计

    –pretty:自定义显示的结构 :如:–pretty=oneline:每次提交的信息一行显示完

    自定义时使用的参数:

撤销操作
  • 重新提交

    git commit --amend # 该方法会替代上一次的提交
    
  • 取消暂存的文件

    git reset HEAD xxxx(文件)
    
  • 撤销对文件的修改

    git checkout --<file>
    
打标签
# 查询标签
git tag -l “标签(可进行匹配搜索)”

# 创建标签,如果不使用-a参数 进行版本信息查询时就看不到额外的标签信息
git tag -a v1.1 -m ‘message’

# 查看版本信息
git show v0.1

# 给历史版本打标签
git tag -a v1.2 9fceb02(部分校验和)

# 删除标签 -d 
git tag -d v1.4-lw


如果使用远端服务器,标签需要另外push
Git别名
git config --global alias.co checkout 

git config --global alias.br branch 

git config --global alias.ci commit
git config --global alias.st status

和github一起使用

简单熟悉本地git的使用后,可以进行远端操作。

多次本地git库关联到github出现错误后,建议构建先创建远端的github仓库,使用git clone 仓库名命令克隆至本地,再进行git的使用。

当然这里也根据官方文档记录本地连接远端仓库服务器的方法:

  • 首先查看本地git仓库是否配置远端服务器:
get remote 

如果是克隆的仓库,可以看到origin(git给克隆仓库服务器的默认名字)

使用 -v 可以显示 使用的git的url,主要使用的是https/ssh

可以存在不止一个远端url

  • 添加远程仓库
# pd 别名
git remote add pb https://github.com/paulboone/ticgit
# 获取仓库信息,origin 无法获取??
git fetch pb
必须注意 git fetch 命令只会 将数据下载到你的本地仓库——它并不会自动合并或修改你当前的工作
  • 推送到远程仓库
# 推送到origin 的master分支
git push origin master
# 展示远程仓库的url和跟踪分支信息,列出了执行git push会自动推送的远程分支
git remote show origin  

  • 远程仓库的重命名与移除
git remote rename pb paul

git remote remove paul
  • 标签的推送(共享标签)与删除(远端)

默认git push 不会传送标签到远端服务器仓库上。

git push origin <tagname>
#  一次性提交多个标签
git push origin --tags

# 删除标签
git push <remote>:refs/tags/<tagname>
git push origin --delete <tagname>

Git分支

分支是一个很好理解的东西,创建新的分支能够保证原有的项目不受影响。也是git官方文档里称之的“必杀技特性”。git鼓励频繁的使用分支和合并。

一般来说执行commit命令后git 中存在三个对象,一个是文件快照对象,树对象(记录文件结构和快照对象的索引,以及提交对象(包含指向前树对象的指针和所有提交信息。

创建分支
# 创建新的分支
git branch testing

创建分支后需要知道如何指向这个分支,git中存在HEAD的特殊指针,通过它进行分支的指定。

# 指向新建的分支
git chechout testing

# 创建分支并立即切换
git checkout -b <newbranchname>
分支的合并

因为在新建的分支上进行修改后,快照是接续主分支的,合并分支就像将把分支的指针指向修改后的快照。在官方文档中把这一操作叫做快进。

# 合并新的分支到当前分支
git merge <newbranch>

分支合并后如需要删除临时新建的分支可以使用:

git branch -d <branch>

特殊情况实例:

当新分支是在当前分支指向的快照之前分出的。如果master中修改的文件和新分支里修改的文件不是同一文件的同一部分。合并的命令不变,git会经过一系列的处理进行合并。

如果产生冲突git不会继续进行,直到你解决了冲突。这里使用git status可以查看冲突的文件。

使用图形化工具会有助于解决该问题。。git mergetool

分支管理
# 查看分支
git branch
git branch -v # 可以查看每个分支的最后一次提交
# --merged :查看哪些分支已经与当前分支合并
# --no-merged 查看所有包含未合并工作的分支,分支中有未合并的工作,不能使用-d删除
# -D 强制删除

.gitignore忽略文件

当一个git库中有不需要上传的文件时 进行配置:

*.[oa]

*~

表示忽略以.a或.o结尾的文件,和忽略名字以~结尾的文件。

案例:

# 先忽略所有的.a文件
*.a
# 但跟踪所有的lib.a文件
!lib.a
# 忽略 当前目录下的TOD文件 而不忽略 xxx/TOD
/TOD
# 忽略任何目录下名为build的文件
build/
# 忽略当前目录下的文件,而不忽略doc/server/a.txt
doc/*.txt
# 忽略所有
doc/**/*.txt

其他.gitignore配置可以在这里看到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坠入my

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值