git 笔记

配置名字和email:
    1. git config --global user.name 'Your Name'
  2. git config --global user.email 'email@example.com'
  补充:
    git config 和 --global参数 表示这台机器上的所有git仓库都会使用这个配置
 
创建版本库:
  1. 创建一个空目录:
    mkdir learnigit // 新建learnigit文件夹
    cd learnigit
    pwd // 显示当前目录
  2. 通过git init命令把这个目录变成git可以管理的仓库:
    git init
  补充:
    使用ls -ah命令查看 . 开头文件
    
将文件添加到版本库:
  1. git status // 查看改动的文件
  2. git diff <file> // difference  查看改动的内容
  3. git add <file> // 也可以用git add . 把工作区所有改动了的文件添加到版本库中的暂存区
  4. git commit -m '本次提交说明' // 把暂存区的文件提交到默认的master分支
  注意:
    不要用windows自带的记事本编辑任何文本文件,否则可能会遇到很多不可思议的问题
    
版本回退:
  1. git log // 查看提交日志
  2. git log --pretty=oneline // 查看提交日志 出现的一大串字符串是版本号id
  
  3. git reset --hard HEAD^ // HEAD^改成你想回滚的版本  HEAD^也可以替换成版本号
     // 回滚一次之后,又突然反悔了,那么只要命令行窗口没关,
     // 那么就可以往上找,找到你想要的那个版本号
     
  4. git reflog // 记录每一次的命令,可以找到你之前回滚的版本号,进而滚回到你最一开始的版本
  注意:
    HEAD表示当前版本
    上一个版本就是HEAD^
    上上个版本就是HEAD^^
    往上N(3)个版本可以写成HEAD~N(3)
    版本号不用全写,也不能只写前两位
    
工作区和暂存区: // 只有先add进暂存区才可以commit
  工作区:
    工作开发的文件夹
  版本库:
    工作区中的.git文件夹
  暂存区:
    版本库中的stage(或者是index)
  git diff HEAD -- 文件名 // 可以查看当前文件在工作区和版本库中的区别
  
撤销修改:
  // 两种情况:
  // 1. 工作区文件自修改后还没有被放到暂存区(还没有add),
  //    现在撤销修改工作区文件就回到和版本库(commit)一模一样的状态。(回到上一次commit)
  // 2. 工作区文件已经添加到暂存区(已经add)后,又作了修改,
  //    现在撤销修改工作区文件就回到添加到暂存区后的状态。(回到add之后的状态)
  // 总结:让文件回到最近一次commit或add时的状态
  
  1. git checkout -- file
  备注:git checkout -- file命令如果没有了 -- 就变成了切换到另一个分支
  
  // 上边的是修改了没有放到暂存区,或者是放到暂存区之后又修改
  // 这个是放到暂存区之后不修改,然后撤销暂存区里的。
  2. git reset HEAD file // HEAD表示最新版本
  总结:
    1. 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
    2. 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按1操作。
    3. 已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。
    
删除文件:
  一个已经commit了的文件,可以在文件管理器中删除(rm file)
  两种情况:
    1. 确实要删除:
      git rm file
      git commit 
    2. 不小心删错了:
      git checkout -- file // 用版本库里的版本替换工作区的版本
      
远程仓库:
  1. 在用户主目录下如果有id_rsa和id_rsa.pub文件,如果有跳过,如果没有:
      ssh-keygen -t rsa -C '自己的邮箱地址'
     然后一路回车,生成两个文件:
      id_rsa.pub 公钥
      id_rsa 秘钥
  2. 登录github,打开'Account setting' 'SSH Keys'页面
     点击'Add SSH Key' 填写title,在Key文本框中粘贴id_rsa.pub文件的内容
  3. 如果有多个电脑,需要把每个电脑的Key都添加到github,每台电脑就都可以推送了
  
添加远程库:
  1. 点击create a new repository
  2. 在repository name 填入仓库名称
  3. 点击create repository 创建成功
  
  4. 在本地的仓库下运行:将本地仓库与远程仓库关联
     git remote add origin 你远程仓库的git地址
     // 远程库的名字 origin
     
  5. 将本地库的所有内容推送到远程库
     git push -u origin master
     // git push 把当前分支master推送到远程
     // 由于远程库是空的,第一次推送时加上-u参数,
     // git不但会把本地的master分支内容推送的远程新的master
     // 还会把本地的master分支和远程的master分支关联起来,
     // 在以后的推送或者拉取时就可以简化命令
     
     // 在以后就可以:
     git push origin master
     // 当第一次clone或者push会得到一个警告,为了安全。只会出现一次。
     
从远程克隆:
  1. github创建仓库
  2. 在本地使用
     git clone git地址
  总结:
    1. 克隆地址默认使用ssh,通过ssh支持原生的git协议速度对快
    2. https速度比较慢
    3. https每次推送都必须输入口令
    
创建合并分支:
     // 执行以下命令表示创建并切换
  1. git checkout -b dev // 相当于 git branch dev(创建分支) 和 git checkout dev(切换分支)
     // 查看所有分支,*代表当前分支
  2. git branch
     // 切换分支
  3. git checkout 分支名称
     // 合并分支 把dev分支合并到master分支上
  4. git merge dev
     // 删除分支
  5. git branch -d 分支名称
     // 删除远程分支
  6. git push origin --delete 分支名称
     // 基于某个分支创建分支
  6. git checkout -b newBranch origin/oldBranck

取消合并:
  git merge --abort

分支管理策略:
  1. git merge dev // 合并使用fast forward合并,合并之后看不出曾经做过合并
  2. git merge --no-ff -m "合并信息" dev // 使用--no-off合并,合并后可以看出合并记录

bug分支:
  // 当解决bug时,应该创建一个分支来修复它,
  // 但是当前正在dev上进行的工作还没有提交,
  // 因为工作只进行到一半,还没法提交
  // 使用git stash 把当前工作区储藏起来,等以后恢复工作区继续工作
  1. git stash
  // 确定要在哪个分支上修复bug就在哪个分支上建立分支
  2. git checkout -b 分支名称
  3. 修复bug
  // 切换回之前的分支并合并,然后删除bug分支
  4. git checkout 分支名称
     git merge --no-ff -m '合并说明' 将要合并的分支名称
     git branch -d 分支名称
  // 切换回改bug之前的分支,继续开发
  5. git stash list // 查看之前储藏起来的工作区
  // 恢复之前的工作区
  6. 两种方式:
    6.1 git stash apply // 这种恢复之后stash内容不删除
      6.1.1 git stash drop // 需要用这个命令去删除
    6.2 git stash pop // 恢复的同时把stash内容删除
    // 可以多次stash,恢复的时候先查看都有哪些,然后用:
    6.3 git stash apply stash@{0}
    
Feature分支:
  // 添加一个新功能时,最好新建一个feature分支,
  // 在上面开发,完成后,合并,最后,删除该feature分支。
  
  // 删除指令:
  git branch -d 分支名称
  // 强制删除:
  git branch -D 分支名称

多人协作:
  git remote // 查看远程库
  
  git remote -v // 查看更详细的信息,没有push权限的不显示push

推送分支:
  // 在本地新建的分支需要推送到远程,然后下边抓取的时候才可以抓取到,才可以关联分支
  git push origin 分支名称
  推送选择:
    1. master分支是主分支,因此要时刻与远程同步;
    2. dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    3. bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    4. feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

抓取分支:
  // clone代码之后本地是只有master分支的,那么就需要:在本地创建一个和远程一样的
  git checkout -b dev origin/dev // 可以不加origin/dev
  
  // 当pull提示There is no tracking information for the current branch.
  // 说明没有指定本地dev分支与远程origin/dev分支的链接:(本地和远程关联)
  git branch --set-upstream-to=origin/dev dev
  
查看记录:
  git log --grahp --pretty=oneline --abbrev-commit
  git log --pretty=oneline --abbrev-commit
  
Rebase:
  git rebase // 把提交的记录展现形式改成一条线
  
创建标签:
  // 标签和commit差不多,但是commit号是一堆数字,标签可以自己定义,尤其是发布各个版本,可以快速找到某个版本
  // tag 就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起
  
  // 切换到需要打标签的分支上:
  1. git branch
  2. git checkout maste
  // 创建一个新标签:
  1. git tag v1.0 // v1.0 是标签名字
  // 查看所有标签:
  1. git tag
  
  // 默认是在最新提交的commit上创建标签的
  // 如果想给之前的commit打标签,
  1. 查找历史的commit id 
    git log --pretty=oneline --abbrev-commit
  2. 创建标签:
    git tag 标签名 commit id
  
  // 查看标签信息:(按字母顺序排序)
  git show 标签名
  
  // 创建对有说明的标签
  git tag -a 标签名 -m 说明  // -a 标签名 -m 说明

操作标签:
1. 删除标签:
  git tag -d 标签名
2. 推送某个标签到远程:
  git push origin 标签名
  // 推送全部标签名:
    git push origin --tags
3. 删除远程标签:
  1. 现在本地删除:
    git tag -d 标签名
  2. 远程删除:
    git push origin :refs/tags/标签名
别名:
  git config --global alias. 简写形式 '全写'
-------------------------------------------------------

追加:

撤销 commit:

git reset --soft HEAD^

获取远程分支

git fetch

查看某次 commit 内容:

  1. git log // 获取 commit id

  2. git show 某次的 commit_id // 查看当前 commit 的内容
查看 stash 内容:

  1. git stash list

  2. git stash show // 查看做了哪些改动,默认第一个

  2.1 git stash show stash@{num} // num 是 通过 git stash list 查出来的前边的编号

  2.2 git stash show -p // 显示文件的具体改动,也可以通过 git stash show stash@{num} -p 来查看具体某个 stash 的改动

  3. git stash drop stash@{num} // 丢弃某个 stash

  4. git stash clear // 清除所有 stash

删除未跟踪的文件:

  // 执行删除命令前先看一下要删除哪些文件/目录

  1. git clean -nf // 查看将要删除哪些文件

  2. git clean -nfd // 查看将要删除哪些文件及文件夹目录

  3. git clean -nxfd // 查看将要删除哪些文件及文件夹目录以及编译之后的文件以及 gitignore 中的文件(慎用)

  // 查看完之后执行对应命令

  1. git clean -f // 删除文件

  2. git clean -nf // 删除文件及目录

  3. git clean -nfd // 删除文件及文件夹目录以及编译之后的文件以及 gitignore 中的文件(慎用)

分支重命名:

  1. git branch -m oldBranchName newBranchName // 重命名

  2. git push origin :oldBranchName // 删除远程分支

  3. git push origin newBranchName // 将重命名过的分支提交

git 删除本地及远程分支进行恢复操作:

  1. git log -g // 找回之前提交的 commit_id

  2. git branch 新分支名称 commit_id // 使用命令用这个 commit_id 创建一个分支

  3. git checkout 新分支名称 // 切换到新分支,检查文件是否存在

git 回退暂存区的文件: 

  1. git rm --cached fileName

git 删除本地及暂存区的文件

  1. git rm -f fileName
    

  
  
  
  


   
    
    
    
    
    

×
正在翻译 c ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值