git学习笔记

本笔记主要参考廖雪峰的git教程:

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

本笔记对主要内容进行了总结,方便日后进行查阅。若进行全面系统的学习可以去上面的网站学习,讲的很基础,也有实例。

  • 下载安装

    • 直接去官网下载,是免费的
  • 设置用户名邮箱

    • git config –global user.name “Your Name”
    • git config –global user.email “email@example.com”
  • 初始化

    • cd到文件夹,用git init
  • 提交到仓库(两个步骤)

    • 首先git add filename,将文件放到暂存区stage或者叫index
    • 然后使用git commit -m “” 提交,将所有暂存区的内容提交到当前分支,默认是master分支
  • 查看当前仓库的状态

    • git status 
  • 查看对文件作了什么修改

    • git diff filename
  • 重新提交文件

    • 查看修改之后,确认没问题了,把文件再提交一下,即add和commit命令
  • 查看修改了什么

    • git log,可以查看每次commit的id和修改内容
  • 版本回退

    • HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上个版本,HEAD~100表示往上100个版本
    • head其实是一个指针,指向当前版本
    • git reset –hard HEAD^,表示回退到上一个版本,回退到其他版本改HEAD^即可
  • 如果记得commit id,也可以用git reseet –hard COMMITID, id不用写全,只要不冲突就行
  • git reflog,记录你的每一个命令,如果忘记commit id,可以通过这个命令查看,最前面的一列就是id

  • 撤销修改

    • 使用git checkout – filename,丢弃工作区的修改,实质上是用版本库的文件替换
    • 如果还没有add到暂存区,使用git checkout – filename, 可以撤销修改到和版本库一样的状态
    • 如果已经add到暂存区,但是还没commit,使用git checkout – filename, 撤回到刚add后的状态
    • 如果已经add到暂存区,但是还没commit,又想丢弃add之后的操作,用git reset HEAD filename, 可以把暂存区的内容放回工作区,然后用checkout命令撤销修改
  • 删除文件

    • git rm filename命令,在版本库中删除文件,实际上没有删除
    • git checkout – filename,用版本库的备份中取出,但是只能恢复到最新版本
  • 协议

    • git支持多种协议,包括https、ssh等,建议使用ssh,速度快,不用每次都输入口令
    • ssh-keygen -t rsa -C “youremail@example.com”,如果是windows,在C:\Users\Dell下找到.ssh文件夹,里面有一个公钥一个私钥,带.pub的是公钥,把公钥复制到github的account
    • 如果是mac系统或者Linux系统,直接cd ~/.ssh,即可找到公钥所在目录
  • 分支管理

    • 查看分支:git branch
    • 创建分支:git branch
    • 切换分支:git checkout ,切换到分支后可以commit,不会影响master的内容
    • 创建+切换分支:git checkout -b
    • 合并某分支到当前分支:git merge ,合并之后才会更新分支更改的内容
    • 删除分支:git branch -d
    • 强制删除分支:git branch -D ,如果分支更改了之后merge之前,突然不想要该分支的内容,用上面的删除命令会提示分支尚未合并。所以用这个命令强制删除
    • 分支的操作非常快,建议现在分支上操作,再merge到master上
  • 分支冲突

    • 当创建了一个分支并提交了修改之后,如果切回master后也对同一个文件提交了修改,那么在merge的时候就会有冲突,需要修改冲突内容才能提交
  • 使用git log –graph可以查看分支的合并图

  • 分支管理策略

    • 默认是Fast forward模式,删除分支后,会丢失分支信息
    • 如果要强制禁用ff模式,git会在merge时生成一个新的commit,这样,可以从分支历史上看出分支信息。git merge –no-ff -m “merge with no-ff” dev
    • 使用master作为正式发布版本,平时在分支以及分支的分支干活以及merge
  • 保存工作现场

    • 目前在一个分支如dev工作,还没有到commit的时候。突然有bug或者其他紧急工作要立马完成,需要先把当前工作保存一下。不然的话,修复bug,也会创建一个分支,如bug,还是会看到dev尚未commit的状态,也就是工作区有dev分支的信息,这是我们在bug分区不想看到的
    • 在dev分区上使用git stash命令保存工作现场,工作区就很干净了
    • 使用git stash list可以查看工作现场
    • 使用git stash apply stash@{0}命令可以恢复制定的stash
    • 使用git stash apply,恢复工作现场,并且恢复之后stash内容还在,可以用git stash drop删除
    • 使用git stash pop在恢复的同时删除工作现场
  • 把本地库和远程库

    • 创建远程库,可以再github上创建
    • 在本地库运行:git remote add origin git@github.com:username/yourgit.git,username是github账户名,远程库默认为origin,yourgit是远程的不是本地的,这个命令会把当前所在位置的本地库推到远程
    • 把本地库的内容推送到远程库:git push -u origin master。第一次推按master分支,加了-u,git会把本地master分支和远程master分支关联。
    • 以后只要本地作业提交了,就可以通过命令:git push origin master将本地master分支的最新修改推送到github
    • remote origin already exists问题解决:根本原因是你在一个本地仓库提交到了不同的远程仓库,这个时候可以在本地另外选择目录,重新作为本地仓库,再提交
    • 本地仓库提交到远程仓库内容没有更新问题解决:提交到远程仓库时,只有本地commit之后,才会有更新
    • 本地仓库push到远程仓库的时候,提示updates were rejected because the tip of your current branch is behind问题解决:是小伙伴的提交和你的提交有冲突。可以先用git pull把最新的提交从origin抓取下来,然后再本地合并并解决冲突,再推送
    • 使用git pull时,There is no tracking information for the current branch问题解决:原因是没有指定本地分支与origin下分支的链接,使用git branch –set-upstream dev origin/dev,然后再pull
  • 从远程仓库克隆clone

    • 查看远程库信息:git remote -v
    • git clone git@github.com:username/yourgit.git,会把yourgit克隆到当前所在的本地位置
    • 其他小伙伴使用clone命令只能看到master分支,如果大家都用dev作为开发分支,需要创建远程origin的dev分支到本地:git checkout -b dev origin/dev,然后就可以修改,并把dev分支push到远程的dev分支,两个名字最好一致,比如都叫dev
  • 多人使用git开发项目的工作模式:

    • 首先,可以试图用git push origin branch-name推送自己的修改;
    • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    • 如果合并有冲突,则解决冲突,并在本地提交;
    • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
    • 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name
  • 标签

    • 标签是指向某个commit的指针,但是不能移动。主要为了方便区分版本,commit id一大串,不方便看
    • 到相关分支,使用git tag 即可对最新提交打标签
    • 对历史提交打标签,使用git tag
    • 指定标签名和说明,使用git tag -a -m
    • 查看说明文字,使用git show
    • 查看所有标签,使用git tag
    • 删除本地标签,使用git tag -d
    • 推送某个本地标签到远程,使用git push origin
    • 一次性推送全部尚未推送的本地标签,git push origin –tags
    • 删除远程标签,git push origin :refs/tags/
  • 操作github

    • 需要从官方仓库fork一下,到自己的远程仓库,然后再clone到本地,然后再pull request。直接克隆官方仓库到本地仓库是没有权限推送的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值