GIT学习

安装GIT后配置
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。


创建版本库
创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/C/Users/qidingquan/Desktop/learngit
pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。


通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in c:/Users/qidingquan/Desktop/learngit/.git/(空git仓库)
前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。


管理的文件一定要放在git仓库中,否则找不到文件
将文件添加到仓库
git add 文件名+后缀
把文件提交到仓库
git commit -m 本次提交说明(方便查看历史记录)


git status命令看看结果,掌握仓库当前的状态,
查看文件被修改的内容
git diff
查看提交历史记录
git log显示从最近到最远的详细显示提交日志
git log --pretty=oneline简单显示提交日志
回退到历史版本
git reset --hard HEAD(HEAD代表当前版本,HEAD^代表上一个版本....以上HEAD~100)
回退到指定的历史版本
git reset --hard 历史版本的id(commit id)
找不到版本的id怎么办
查看命令历史记录
git reflog


查看文件内容
cat 文件名+后缀名


前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。


第一次修改文件-> git add -> 第二次修改文件 -> git commit   第二次的修改不会被提交
第一次修改文件-> git add -> 第二次修改文件 -> git add -> git commit  第二次修改提交了
查看工作区和版本库里面最新版本的区别
git diff HEAD -- 文件名+后缀名


撤销工作区修改的内容
git checkout -- 文件名+后缀名
1.文件修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
2.文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。


文件修改后添加到暂存区,想撤销修改怎么办?
git reset HEAD 文件名+后缀名
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,怎么办?
先撤销暂存区的修改,再撤销工作区的修改


删除版本库中的文件
git rm 文件名+后缀名
误删版本库中的文件
git checkout -- 文件名+后缀名  (但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。)


分支的作用
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
创建分支
git branch 分支名
切换分支
git checkout dev
创建并切换分支简写
git checkout -b 分支名(git checkout命令加上-b参数表示创建并切换)
查看当前分支
git branch  //git branch命令会列出所有分支,当前分支前面会标一个*号。
合并某分支到当前分支
git merge 分支名(git merge --no-ff -m "注释" 分支名   请注意--no-ff参数,表示禁用Fast forward)
修改合并分之后的冲突
<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存
解决冲突后,再提交,合并完成
git log 查看分支的合并情况
git log --graph查看分支合并图
删除分支
git branch -d 分支名
git branch -D 分支名(强行删除)


BUG分支
当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交:并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
git stash 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
刚才的工作现场存到哪去了?用git stash list命令
Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
二是用git stash pop,恢复的同时把stash内容也删了
然后恢复指定的stash git stash apply stash@{0}






远程仓库使用
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
其实一台电脑上也是可以克隆多个版本库的,只要不在同一个目录下
实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。


将远程项目克隆到本地
git clone 远程仓库地址
在项目中修改后需要提交到本地仓库
如何把本地库中修改的内容提交到远程仓库呢?
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push origin master(不是第一次)
查看远程库的信息
git remote(查看详细信息git remote -v)
推送分支
git push origin 分支名
创建远程分支到本地
git checkout -b 分支名 origin/分支名
将远程库的内容抓取下来
git pull
抓取失败?
原因:没有指定本地分支与远程分支的链接
git branch --set-upstream 分支名 origin/分支名


两人同时操作相同分支,推送失败,因为两个人修改的内容存在冲突,远程仓库分支内容比本地分支内容更新一些,那解决方法呢?
先将远程分支上的数据抓取下来,在本地合并,解决冲突,再次推送内容


标签管理
发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
创建标签
git tag 标签名(默认标签是打在最新提交的commit上的)
git tag -a 标签名 -m 注释 commit_id(添加说明的标签)
更改标签位置,比如:现在最新代码是星期五的,我要在星期四的代码上打标签
首先找到历史提交的commit_id,然后命令
git tag 标签名 commit_id
查看标签信息
git show 标签名
查看所有标签
git tag
删除标签
git tag -d 标签名
推送标签到远程
git push origin 标签名
git push origin --tags(将本地所有标签推送到远程)
删除远程标签
首先删除本地标签
git push origin :refs/tags/标签名(从远程删除)


忽略你不想提交的私密文件
需要编写.gitignore(文件中存放忽略文件的名字)

.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

在填写忽略文件的过程中,我发现在Android Studio里面,.gitignore中已经标明忽略的文件目录下的文件,当我想git push的时候还会出现在push的目录中,原因是因为在Studio的git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,这时候我们就应该先把本地缓存删除,然后再进行git的push,这样就不会出现忽略的文件了。git清除本地缓存命令如下:

git rm -r --cached .

git add .
git commit -m  'update .gitignore'






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值