【Git】Git学习笔记

Git

 

  • Git准备工作
    • Git说明
    • Git安装
    • Git创建仓库命令
      • $mkdir learngit
      • $cd learngit
      • $pwd
        • /c/Users/jing
    • 初始化一个Git仓库,使用git init命令。
    • 其他
      • Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的
      • 跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等
  • 命令
    • 添加文件到仓库
    • 为什么将文件添加到仓库中需要两步?1.因为commit可以一次性添加多个文件,即相当于每次都add 一个文件到一个list中,commit提交的时候就把刚刚list所有的文件都提交道仓库中  message提示信息即此次提交主要是干什么操作
      • 1. git add readme.txt
        • fatal: not a git repository (or any of the parent directories)
          • Git命令必须在Git仓库目录内执行(git init除外),在仓库目录外执行是没有意义的
            • 创建仓库 git init
        • fatal: pathspec 'readme.txt' did not match any files
          • 添加某个文件时,该文件必须在当前目录下存在,用ls或者dir命令查看当前目录的文件,看看文件是否存在,或者是否写错了文件名。
      • 2.git commit -m "message filelist"
    • 版本回退
      • $vi readme.txt   编辑文件
        • 编辑完成之后按esc 然后输入:wq  退出当前编辑
        • 参考链接:https://blog.csdn.net/zym18351887819/article/details/80468525
      • $Git log 查看版本历史记录
      • $git log --pretty=oneline  格式化排版结构  查看里版本历史记录
      • $git reset --hard Head^  回滚到上一个版本
        • Head^上一个版本;
        • Head^^上上一个版本
        • Head~100 往上100个版本
      • $cat readme.txt  读取文件的内容
      • $git reset --hard ed8ecd12 撤销回滚到上一个版本,还是想保留当前版本(重返未来)
        • hard commit_id 不一定全部写完,但是要多些几位,因为数据庞大 不一定找得到
      • $git reflog 查看命令历史,已确定要回到未来的哪一个版本
      • $git status 读取文件状态,后面需要跟文件名
    • 工作区和暂存区
      • git add 把文件添加到缓存区
      • git commit 提交修改,把暂存区的所有内容提交到当前分支
      • Git自动创建唯一一个master分支,所以,现在git commit 就是往master分之上提交更改
    • 管理修改
      • Git跟踪并管理的是修改过程,而不是文件
      • 第一次修改--git add --第二次修改--git commit
        • 因为第一次修改将文件add 提交到暂存区,在第二次修改之后commit 在工作区查看的版本是第一次修改之后的
        • 如果要看第二次修改之后的 则需要提交 add 至缓存区然后再commit
    • 撤销修改
      • 修改了文件但是还没有Add
        • git checkout -- readme.txt
      • 修改了文件并且Add到暂存区
        • git reset HEAD readme.txt 把暂存区的修改撤销掉
        • git checkout -- readme.txt
      • 修改了文件并提交到了版本库,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库
    • 删除文件
      • rm text.txt 删除文件
      • 从版本库中删除文件,git rm text.txt 并且git commit 提交
      • 删除错了,需要还原
        • git checkout -- text.txt
        • 无论工作区的修改还是删除 都可以一键还原
  • 远程仓库
    • 创建SSH KEY
      • 在用户主目录下,.ssh目录,id_rsa私钥  id_rsa.pub 公钥
      • 如果没有SSH 则创建密钥
        • ssh-keygen -t rsa -C "443267325@qq.com"
      • 登录Gitee 或者GitHub 在设置里面 SSH Keys 页面  Add SSH Key 添加 id-rsa.pub内容
      • Gitee或者GitHub 需要SSHKey 需要识别你推送的你提交的是你推送的,而不是别人冒充的,而Git支持SSH协议,所以GitHub只要知道你的公钥,就可以确认只有你自己才能推送
      • Gitee 或者GitHub 允许添加多个key
    • 添加远程库
      • 添加新的仓库
        • GitHub
          • 左上角:create a new repo
          • 在 Repository name 填写learngit 其他保持默认设置,点击确认;则成功创建一个新的Git
          • $git remote add origin git@github.com:jiangjing123/learngit.git
          • $ git push -u origin master
            • 由于远程是空的,第一次推送master分支时,要加参数-u 参数,Git会把本地的master分支内容推送到远程,还会把本地master分支和远程master分支关联起来
            • 把当前分支推送到远程
          • $ git push origin master
        • Gitee
          • 左侧添加仓库
          • 在路径填写learngit 其他设置保持默认,点击确认:则成功创建一个新的主题
          • $git remote add origin git@gitee.com:jing_all/learngit.git
          • $ git push -u origin master(第一次)
            • 把当前分支推送到远程
            • 由于远程是空的,第一次推送master分支时,要加参数-u 参数,Git会把本地的master分支内容推送到远程,还会把本地master分支和远程master分支关联起来
            • 报错:fatal: Authentication failed for 'https://gitee.com/jing_all/learngit.git/'   修改了码云的登录密码,但是本地凭证没有进行修改
              • 控制面板-用户账户-凭证管理-windows凭证
              • 找到gitee密码并修改为现在的密码
          • $ git push origin master (之后)
        • 其他:
          • 连接远程仓库时报错,fatal: remote origin already exists
            • $ git remote rm origin
            • $git remote add origin git@gitee.com:jing_all/learngit.git
            • 如果执行 git remote rm origin 报错的话,我们可以手动修改gitconfig文件的内容
              • $ vi .git/config
                • 把 [remote “origin”] 那一行删掉就好了。
          • 当第一次使用clone 或者push命令连接GitHub时,会得到警告:
            • The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.RSA key fingerprint is xx.xx.xx.xx.xx.Are you sure you want to continue connecting (yes/no)?
              • 第一次验证GitHub或者gitee 服务器的key时,需要yes确认
          • Git连接指定的仓库
            • 添加指定仓库$ git remote add origin https://gitee.com/jing_all/learngit.git
              • 报错:fatal: remote origin already exists.
              • 查看远程库信息:$ git remote -v
              • 解决方案:
                • $ git remote rm origin (删除关联的orgin)的远程库
                • $ git remote add origin git@gitee.com:jing_all/learngit.git :连接指定仓库
                • $ git remote rm origin
                  • error: Could not remove config section 'remote.origin'
                • 解决方案:需要修改gitconfig 文件内容
                  • 方案1;
                  • $ vi .git/config
                • 把 [remote “origin”] 那一行删掉就好了。
              • 方案2:
                • 找到github安装路径,
                • 找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那一行删掉就好了
  • 从远程库克隆
    • $ cd F:/Program/1-Git/1-project  选择目录
    • 克隆一个本地库 $ git clone git@gitee.com:jing_all/learngit.git
    • 选择当前克隆的仓库learnGit目录:$ cd learngit
    • 查看当前目录下文件: $ls
    • 其他
      • GitHub给出的地址不止一个,还可以用https://gitee.com/jing_all/learngit.git
      • Git支持多种协议:默认的git://使用ssh,但也可以使用https等其他协议
      • 使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令
  • 分支管理
    • 说明:提交效率,不冲突,不影响他人工作
    • 创建并合并分支
      • 原理
        • master分支是一条线,Git用master指向最新提交,再用Head指向master,就能确定当前分支,以及当前分支的提交点
        • 每次提交,master分支都会向前移动一步,master分支线越来越长
        • 创建新的分支,例如dev时,Git新建了一个指针dev,指向master相同的提交,再把Head指向dev,就表示当前分支在dev上
      • 创建dev分支
        • $ git checkout -b dev
          • 1.$git branch dev
          • 2.$git checkout dev
        • 查看当前分支:$git branch
        • $git add readme,txt
        • $git commit -m "branch test"
      • 切换分支
        • 切换分支master $git checkout master
        • 合并分支 $git merge dev
        • 合并完成后,删除分支dev $git branch -d dev
        • 查看: $git branch
      • 其他
        • 切换分支
          • git checkout <name>
          • git switch <name>
        • 查看分支
          • git branch
        • 创建分支
          • git branch <name>
        • 创建+切换分支
          • git checkout -b <name>
          • git switch -c <name>
        • 合并某分支到当前分支
          • git merge <name>
        • 删除分支
          • git branch -d <name>
    • 解决冲突
      • 原理
        • 可以通过查看readme.txt 根据需要自动处理冲突文档内容
      • 解决冲突
        • 1.创建新的分支
          • $ git switch -c featurel
          • $ vi readme.txt 修改文件内容
          • $ git add readme.txt
          • $git commit -m "And simple"
        • 2.切换maser分支
          • $ git switch master
          • $ vi readme.txt
          • $ git add readme.txt
          • $git commit -m "$ simple"
        • 3.产生冲突
          • $git merge featurel  快速合并
          • $ git status  冲突文件
          • $ vi readme.txt
          • $ git add readme.txt
          • $git commit -m "conflict fixed"
        • 4.合并情况
          • $ git log
          • $ git log --graph --pretty=oneline --abbrev-commit  分支合并图格式化
          • $ git branch -d feature1  删除分支
    • 分支管理策略
      • 原理
      • 1.创建分支
        • $ git switch -c dev
        • vi readme.txt
        • $ git add readme.txt
        • $git commit -m "add merge"
      • 2.切换分支
        • $git switch master
        • $ git merge --no-ff -m "merge with no-ff" dev  请注意--no-ff参数,表示禁用Fast forward
          • Fast forward模式:删除分支后,会丢掉分支信息。
          • 本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
      • 3.分支历史
        • $ git log --graph --pretty=oneline --abbrev-commit
    • Bug分支
      • 原理
        • 修复bug时,会通过创建新的bug分支进行修复,然后合并,最后删除
      • 1.“储藏”工作现场
        • git stash
        • $git status 查看工作区,没有被Git管理的文件,因此可以放心创建分支修复bug
      • 2.确认分支位置
        • $git checkout master  查看当前位置
        • $git checkout -b issue-101  创建临时分支
      • 3.修复bug
        • $ git add readme.txt
        • $ git commit -m "fix bug 101"
      • 4. 切换分支位置
        • $ git switch master 切换分支
        • $ git merge --no-ff -m "merged bug fix 101" issue-101  完成合并后删除issue 101分支
      • 5.返回“储藏”工作现场
        • $ git switch dev
        • $ git status
        • $ git stash list :查看储藏位于哪
      • 5.1
        • 复制特定的提交到当前分支
          • $ git branch
          • $ git cherry-pick 4c805e2
    • Feature分支
      • 原理
        • 添加一个新功能,为了不把主分支搞乱,所以每添加一个新功能,最好新建一个feature分支,完成后,合并,再删除分支
      • 1.创建新分支
        • $git switch -c feature-vulcan
        • $vi vulcan.py
        • $ git add vulcan.py
        • $ git status
        • $git commit -m "add feature vulcan"
      • 2.切回dev 分支 准备合并
        • $ git switch dev
        • 类似与bug 合并分支
      • 3.销毁分支
        • $ git branch -d feature-vulcan
          • error: The branch 'feature-vulcan' is not fully merged.  销毁失败
            • 因分支还没有合并,删除将丢失修改,如果强行删除  则
              • $ git branch -D feature-vulcan
    • 多人协作
      • 原理
      • 操作
        • 多人协作
          • 查看远程信息 $ git remote
          • 查看远程详细信息 $ git remote -v
          • 如果没有推送权限,就看不到push地址
        • 推送分支
          • $ git push origin master
            • master:分支名称
          • master分支是主分支,时刻与远程分支同步
          • dev是开发分支,团队所有成员都需要在上面工作,也需要远程同步
          • bug分支只用于本地修复bug
          • feature分支 取决于是否合作开发
        • 抓取分支
          • 原理:多人合作 往往会master和dev分支推送各自修改
          • $ git clone git@gitee.com:jing_all/learngit.git  克隆
          • $git branch  查看分支
          • 操作人A:$ git checkout -b dev origin/dev  创建本地分支
            • $ git add env.txt
            • $ git commit -m "add env"
            • $ git push origin dev 提交修改
          • 操作人B  提交修改,产生冲突
            • $ cat env.txt
            • $ git add env.txt
            • $ git commit -m "add new env"
            • $ git push origin dev  产生冲突
              • $ git pull  把最新的提交从origin/dev 抓取下来
                • $ git branch --set-upstream-to=origin/dev dev  本地分支与远程分支链接
                • $ git pull
                  • 提示no tracking information
                  • 则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
              • 合并有冲突 手动解决
              • $ git commit -m "fix env conflict"
              • $ git push origin dev
      • 总结
        • 可以试图用git push origin <branch-name>推送自己的修改
        • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
        • 如果合并有冲突,则解决冲突,并在本地提交
        • 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功
  • 总结
    • 查看远程库信息:使用git remote -v;
    • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
    • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
    • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
    • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
    • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
  • Rebase :变基
    • $ git rebase
    • $ git log --graph --pretty=oneline --abbrev-commit
  • 标签管理
    • 原理
    • 创建标签
      • 切换到需要打标签的分支上
        • $ git branch
        • $ git checkout master
      • 添加标签
        • $ git tag v1.0
        • 创建带有说明的标签,用-a指定标签名,-m指定说明文字:
          • $ git tag -a v0.1 -m "version 0.1 released" 1094adb
      • 标签历史数据
        • $ git log --pretty=oneline --abbrev-commit
        • 查找commit id 对应打标签$ git tag v0.9 f52c633
        • 查看标签  $ git tag
      • 查看标签信息
        • $ git show v0.9
    • 操作标签
      • 删除标签
        • 本地标签
          • $ git tag -d v0.1
            • 创建的标签 都只存储在本地,不会自动推送远程
        • 远程标签
          • 1.删除本地:$ git tag -d v0.9
          • 2.删除远程  $ git push origin :refs/tags/v0.9
      • 推送标签到远程  
        • $ git push origin v1.0
        • $ git push origin --tags  全部推送
    • 注意事项
      • 标签不是按时间顺序列出,而是按字母排序

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值