Git的使用

相信大家最开始用git管理代码时,在commit或者push时总会遇到各种各样的错误,然后再根据错误原因去百度原因,会得到各种各样的答案,然后问题也没得到解决。这就很苦恼了,继续又瞎掰扯一会又好了。
面试时看你写了git,也会问你相关问题,还比较细,为了不只是停留在git commit -m " "和git -push。
痛定思痛,我决定重新了解下这个东西。

1. 分布式和集中式

git是Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,是一个开源的分布式版本控制系统。
什么是分布式和集中式呢?他们有什么区别?
集中式开发:是将项目集中存放在中央服务器中,在工作的时候,大家只在自己电脑上操作,从同一个地方下载最新版本,然后开始工作,做完的工作再提交给中央服务器保存。这种方式需要联网,现在云开发就是这样的处理方式。
在这里插入图片描述
分布式开发:只要提供一台电脑作为版本集中存的服务器放就够了,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它也一样干活,只是交换修改不方便而已。而每一台电脑有各自独立的开发环境,不需要联网,本地直接运行,相对集中式安全系数高很多。
在这里插入图片描述

2. git常见命令

1----初始化
git init --在当前目录下生成.git文件夹,里面包含相应的配置文件,亦可以直接用
git init projectname -->添加本地仓库
git remote add origin https://github.com/xxxx 添加远程链接,可以将代码放到对应的服务器上

2----添加用户信息及配置
git config --global user.name "xxxxx"
git config --global  user.email "xxxxx"

不同系统之间文件结束标志可能不一样,所以需要配置
假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作。
Git可以在你提交时自动地把行结束符CRLF转换成LF,而在迁出代码时把LF转换成CRLF。用core.autocrlf来打开此项功能,如果是在Windows系统上,把它设置成true,这样当迁出代码时,LF会被转换成CRLF:

git config --global core.autocrlf true
        Linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你
        肯定想进行修正,把core.autocrlf设置成input来告诉 Git 在提交时把CRLF转换成LF,迁出时不转换

git config --global core.autocry input

3----颜色调整
git config --global color.ui auto
git config --global color.ui true

4----三个用户
local:优先级最高
sytem: 
global:

5----查看状态
git status
            命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。
          一般在commit之前最好使用该命令

6----提交
git add filename  -->将文件添加到暂存区
git commit -m "add meg" --->提交到版本控制系统,最好添加注释

7----diff
              做了一个简单的改动,然后提交了它,git告诉你改动了什么,与暂存区作比较
git diff --staged 或 git diff --cached  暂存区与历史提交的改动作比较
git diff HEAD 显示工作目录与最后一次commit之间的文件变更,即显示所有未commit(包括未add和add两类)的文件变更
              HEAD在git一个指向当前的指针
git diff --word diff   默认是一行的改动,这个命令可以看到字的改动
git diff --stat  要查看有哪些文件发生了变化,可以加上--stat参数
git diff <分支名1> <分支名2> :比较两个分支上最后 commit 的内容的差别

8----log版本
显示按时间顺序从上往下,上面的最新
git log --oneline 快速概要,将每条日志的输出为一行,关于我们提交的是什么
git log -[length]   -[length]参数用于指定显示多少条日志
git log --stat  --->每次提交包含的文件
git log --patch    修改的地方
git log --graph   -graph参数会绘制提交的线索,如果有合并的话,也会更清晰地显示出来
 --decorate   参数用来显示一些相关的信息,如HEAD、分支名、tag名等
 git log --name-status   会带出每次提交对应的文件改动
git log --graph --all --decorate --oneline
git log --author yourname
git log --grep keywords
git log -p -- RELEASE-NOTE.md 
          通过组合使用--auther、--grep、-p这几个参数,几乎能满足大部分检索需求
          
9----remove移除
git add .     ---->监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除        的文件
git add -u   已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区
git add -A   上面两个功能的合集
git rm filename  删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用git rm
git rm --cached   -->当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制
git ignore file  保证以后不会被添加

10----move移动文件
git mv filename1 filename2   文件重命名并add
一个文件mv之后是不是原来的文件,不同的判断依据不同的版本控制系统
CVS   ---->每一次改变后都不是
SVN   ----->数字标识
git   ------>相似度

11----branch分支
git checkout branchname 切换分支
git checkout  -b branchname  创建并切换

12----checkout  
git checkout  ****   撤销丢弃编辑的文件
git checkout  --filename  把文件从HEAD中签出

13----合并merge 
两个文件相似度达到规定的值,会冲突,这个值也可以修改
        三种合并方式
git merge   普通方式
git merge --squash 分支中的 commit 保留一个在 master 中
git merge --rebase    既合并 commits,又保留作者的信息如下:先切换到 要合并的 分支:git checkout test
																		  变基:git rebase -i master
																 切换回目标分支:git checkout master
																		  合并: git merge test
git merge --abort   该命令仅仅在合并后导致冲突时才使用,将会抛弃合并过程并且尝试重建合并前的状态
git branch -d 删除

14----reset回滚三种方式
reset --hard HEAD^  HEAD 和当前 branch 切到上一条commit 的同时,你工作目录里的新改动和已经add到stage区的新改动也会一起全都消失
reset --soft   保留工作目录(不影响原来本地的文件未提交的也不受影响),并把重置 HEAD 所带来的新的差异放进暂存区
git reset (–mixed)  保留工作目录,并将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态

3.具体使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值