GIT学习

1. GIT基础概念

工作区=>暂存区=>版本库
当前根目录下的文档以及文档的修改情况存放工作区提交的内容存放暂存区提交的内容,历史操作数据

2. GIT基本操作

本地仓库操作命令
查看工作区状态git status
查看版本库修改日志git log –pretty=oneline(单行显示)
查看操作命令历史git reflog
查看文件异同git diff fileName
工作区=》 暂存区git add fileName【stage指定文件】path【stage目录下所有untracked文件】
暂存区 =》 版本库git commit -m “commont”
工作区丢弃,恢复到暂存区或者版本库git checkout –fileName
修改版本库指针指向git reset versionId(HEAD~1) –hard
删除版本库文件git rm test.txt 因为本地的删除也是对文件的修改,要想真正的删除就只能用命令来删除,如果是误删本地文件,就使用git checkout test.txt来拉回来

3. 账号管理SSH Key

 为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的公钥都添加到GitHub,就可以在每台电脑上往GitHub推送了(当然每个电脑都有自己生成的私钥)。

GIT账号管理命令
创建SSH Keyssh-keygen -t rsa -C “youremail@example.com”

4. 远程仓库

  是本地的master分支和远程的master分支进行关联,并且将其称为origin分支。所以git remote命令显示的就是origin

GIT远程仓库管理命令
添加远程仓库到本地git remote add origin git@github.com:michaelliao/learngit.git
拉取远程指定仓库的指定分支到本地,并与之合并git pull <远程主机名> <远程分支名>:<本地分支名>
推送本地仓库master到origin(指向远程的master),第一次同步,真正的分布式版本库git push -u origin master
同步本地和远程相当于git push (origin master)

5. 分支管理

  首先必须明确的是当前工作区只能处于一种状态,即:当前切换到哪个分支,就是对该分支的修改,当前工作区就是为该分支服务。
  分支管理,为什么需要分支,假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

 现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

 GIT分支原理,就是在原来的master指针指向的节点上再创建一个分支指针,例如dev,然后再将head指向dev,以后的推送都到了dev了,并且master指向一直不变,保持在了原来的节点。

GIT分支管理命令
创建一个新的分支并切换到它git checkout -b dev
创建一个分支git branch dev
切换到分支git checkout dev
查看分支(并标识当前分支)git branch
切换到指定分支git checkout master
合并指定分支到当前分支git merge dev
删除分支git branch -d dev

6. 冲突解决

 GIT冲突解决,为什么会出现冲突,当两个分支都进行了提交的时候,这时分支就真正的分离了开来,那么此时要想把两个分开的提交合并到一起的时候就会有冲突产生

冲突解决操作
解决冲突1.git diff 查看文件异同,打开文件找到异同点,修改文档并提交
2.git add conflctFile添加修改后文件
3.git commit 提交暂存区
4.git branch -d branchName删除分支
5.git log –graph –pretty=oneline –abbrev-commit查看历史记录(图形化查看)

7. GIT策略

  1. 禁用fast-forward策略
     一般会禁用掉fast-forward,这是因为如果分支没有进行提交,使用fast-forward的情况下,当分支合并后是看不到历史的。所以及时没有提交也是建议使用–no-ff参数来进行merge branch。
  2. bug分支的处理策略
     在接到临时任务并且当前任务没有完成的情况下,你并不想提交,怎么办,建议使用stash功能,git stash可以将当前工作区状态保存到一个地方,当你进行其他操作后,可以查看git stash list 查看stash保存过的内容。使用git stash apply恢复git stash drop来删除,或者直接使用git stash pop恢复的同时删除。可以多次stash,使用git stash apply stash@{0}恢复指定的stash。
  3. feature分支策略
      新功能的开发通用策略,
命令2.bug分支的处理策略
git stashstash当前工作区
git checkout branchName转到修改bug的分支
……进行一系列修改与提交合并
git stash list查看stash的工作区列表
git stash apply恢复stash
git stash drop删除stash
git stash pop弹出stash,apply的同时并且drop

命令3.GIT feature 分支策略
git checkout -b feature-vulcan创建并转到新功能开发的分支
git add vulan.py修改或者添加文件,并添加到暂存区
git checkout dev切换回dev分支,准备合并到之前的开发分支
试图进行合并到dev,合并当然是容易的git merge feature-valan,然后删除分支,但是这时接到了取消该特性的命令,新特性开发要弃掉,但是已经添加到暂存区
如果git branch -d feature-vulcan会提示没有合并,无法删除
git branch -D feature-vulcan如果想强行删除,则会丢掉feature-vulcan分支内容,但是可以让你继续在dev工作

8. GIT多人协作

命令
git remote [-v]查看远程仓库分支名 [详细信息]
git push origin master推送本地master分支到远程仓库
分支推送策略
master主分支,因此要时刻与远程同步;
dev开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

9. 分支管理

 同步本地分支与远程分支,创建与删除远程分支。

命令
重命名本地分支git branch -m devel develop
git push origin local_branch:remote_branch同步本地分支与远程分支。
local_branch本地分支;该分支不存在怎会删除远程分支
remote_branch,origin的remote_branch分支;该分支不存在则远程会创建

对于一般使用来说以上已经够用了


10. 标签管理

 标签其实就是版本库地一个快照。理解虚拟机的同学肯定理解快照功能。本质上也是一个commit指针,但是与分支指针比较起来它不可移动。所以可以commit内容到分支指针,却不可以提交到标签。

命令
查看本地taggit tag -n
添加本地taggit tag -a 8-4 -m ‘8-4 微信支付’
删除本地taggit tag -d <tagname>
查看远程taggit ls-remote –tags
获取远程taggit fetch origin tag <tagnam>
删除远程taggit push origin –delete tag <tagname>
推送本地分支到远程分支git push –tags

常见问题

  1. 远程分支与本地分支同步和合并方法。这样可以提前预知一下有哪些异同。
      通常的做法是
    1. 把远程仓库master分支下载到本地并存为tmp分支
      git fetch origin master:tmp
    2. 查看tmp分支与本地原有分支的不同
      git diff tmp
      这里主要是看看有没有其他的改动…
    3. 将tmp分支和本地的master分支合并
      git merge tmp
      这个时候呢,本地与远程就没有冲突了,而且还保留了我今天的代码,现在 Push就OK啦!
    4. 最后别忘记删除tmp分支
      git branch -d tmp

gitignore法则
#有一个需要注意的地方就是,gitignore要在没有add前设置才生效。

#所有后缀文件
*.gitignore
*.iml
#所有名为xxx的目录或文件
Redis-x64-3.2.100
.idea
.project
.settings
.svn
target
logs
redis-desktop-manager-0.8.8.384.exe
deploy
#当前目录下的文件或目录
/config
/zhjs/zhjs-web/
/zhjs/zhjs-web - 副本/

跟踪某个文件夹
!/plutommi/mmi
跟踪某类文件
!*.c
!*.h

跟踪某个指定文件
!/plutommi/mmi/mmi_features.h

修改最后一次提交:
gitaddforgottenfile git commit –amend

取消已经暂存的文件
git reset HEAD filename

取消文件的修改
git checkout – filename

从文件追踪和本地都删除
git rm file1

从文件追踪删除,本地不删除
git rm - -cached file1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值