Git使用教程 个人整理笔记

Git 使用指南


本文参考《廖雪峰Git教程》,本人概括整理后用typora记录,作为个人备忘录。
本着互助共享的开源精神,现发布于CSDN。若需要.md原文档,请私信获取。
仅供大家个人使用,请勿用于任何商业用途。
第一次发布文章,如有错误,欢迎交流!


  1. 创建版本库

    $ mkdir learngit
    $ cd learngit
    $ cd learngit
    $ pwd
    $ git init
    

    pwd:显示当前目录
    git init:将当前目录变成 Git 管理仓库

  2. 把文件添加到版本库

    • learngit目录或其子目录下,新建readme.txt文件
    • $ git add readme.txt
      $ git commit -m "wrote a readme file"
      
    • -m后输入本次提交的备注
    • 可以多次add不同文件,最后一次commit
  3. 查看仓库当前状态

    • $ git status:查看仓库当前状态
    • Changes not staged for commit:文档被修改过,但未准备提交
    • $ git diff readme.txt:查看具体修改内容
    • $ git add readme.txt
      $ git status
      $ git commit -m "add distributed"
      $ git status
      
  4. 版本查询与版本回退

    • 每次commit都等于生成一张快照
    • $ git log:查看提交日志,由近及远
    • $ git log --pretty=oneline:每次提交以单独一行显示
    • HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上一个版本,HEAD~100表示往上100个版本
    • 版本回退: $ git reset --hard HEAD^
    • $ git log不再保存刚才被替换掉的版本,命令行找到版本号(commit id)的前几位再回退:$ git reset --hard c9636b
    • $ git reflog:查询提交的每一次版本号及命令历史
  5. 工作区和暂存区

    • 工作区 Working Directory:learngit文件夹
    • 版本库 Repository:工作区中的隐藏目录.git
      • 版本库中有暂存区 stage/index
      • 还有自动创建的第一个分支master和指向master的指针HEAD
    • $ git add把修改从工作区复制到版本库暂存区
    • $ git commit版本库暂存区的所有待提交修改一次性提交到版本库分支
  6. 管理修改:所有修改如果不用$ git add到暂存区,就无法加入到commit

    • 第一次修改 -> git add -> 第二次修改 -> git commit
    • 上述操作后,第二次修改不会被提交
  7. 撤销修改

    • $ git checkout -- readme.txt:撤销该文件的修改,回到$ git add或者$ git commit时的状态
      • 修改后还未添加到暂存区,撤销工作区修改就回到版本库状态
      • 加到暂存区后又做了修改,撤销修改就回到添加到暂存区后的状态
      • $ git checkout -- file命令中的--不能省略,否则会变成“切换到另一个分支”命令
    • 修改文件后已经添加到暂存区
      • $ git reset HEAD <file>:撤销暂存区的修改,重新放回工作区
      • $ git checkout -- <file>:撤销工作区的修改
    • 修改文件后,已添加到暂存区,已提交
      • 版本回退:$ git reset --hard HEAD^
  8. 删除文件

    • 首先$ rm readme.txt,然后$ git commit
    • 误删:$ git checkout -- readme.txt,用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原
    • 注:未被添加到版本库的文件,误删后无法回复
  9. 添加远程库

    • Github中添加本机 SSH Key,新建代码仓库RepositoryName
    • 关联远程库:git remote add origin [email protected]:GithubUserName/RepositoryName.git
    • 第一次推送master分支的所有内容:git push -u origin master
    • 此后每次本地提交,使用命令git push origin master推送最新修改
    • 有网络连接时,本地提交推送完成同步
  10. 从远程库克隆

    • Github创建RepositoryName
    • $ git clone [email protected]:GithubUserName/RepositoryName.git
    • 也可用https协议,但速度慢且每次推送都必须输入口令,地址用https://github.com/GithubUserName/RepositoryName.git
  11. 分支管理

    • 创建分支:$ git branch <name>
    • 查看分支:$ git branch
    • 切换分支:$ git switch <name>
    • 创建+切换分支:$ git switch -c <name>
    • 合并name分支当前分支$ git merge <name>
    • 删除分支:$ git branch -d <name>
  12. 解决冲突:Git无法自动合并分支时,必须先解决冲突再提交完成合并

    • Git用<<<<<<<, =======, >>>>>>>标记不同分支的内容
    • 打开文件修改冲突内容,保存文件
    • add + commit:完成分支合并
    • 删除不需要的分支
    • $ git log --graph --pretty=oneline --abbrev-commit:查看分支合并图
  13. 分支管理策略

    • Fast Forward模式:删除分支后会丢掉分支信息
    • 禁用Fast Forward模式,合并时则生成新的commit,从分支历史上可以看到分支信息
    • 强制禁用Fast Forward模式: $ git merge --no-ff -m "message" <name>
  14. 分支策略

    • master为稳定分支,仅用来发布新版本,不能用来工作
    • dev为工作分支,团队每人都有自己的分支,按时合并到dev
    • 分支合并时,采用--no-ff普通模式合并(保留合并历史)
  15. Bug分支

    • dev分支上的工作暂未完成,无法提交;但需要紧急修复其他bug:stash,保存工作现场,以后可恢复后继续工作
    • 修复bug步骤
      • a. $ git stash:保存当前工作现场
      • b. 确定在哪个分支上修复bug,就从该分支initial上创建临时分支issue
      • c. 在临时分支issue上修复bug,commit提交
      • d. 切换到原分支initial,merge合并,删除临时分支issue
      • e. 回到dev分支,恢复工作区
    • 恢复工作区:$ git stash apply命令查看stash内容
      • 方法一:$ git stash apply,恢复后stash内容并不删除,需要用$ git stash drop手动删除stash内容
      • 方法二:$ git stash pop,恢复的同时删除stash内容
      • 可以多次stash,$ git stash apply查看stash内容,恢复指定内容:$ git stash apply stash@{0}
    • initial分支上修复的bug,需要合并到当前dev分支,可以用$ git cherry-pick <版本号CommitID>命令,把提交的bug修改“复制”到当前分支
  16. Feature分支:用于开发新功能,完成后合并到主分支

    • 新建分支:$ git switch -c feature-name
    • 丢弃未被合并过的分支,强制丢弃$ git branch -D <name>
  17. 多人协作:远程仓库默认名称为origin

    • 查看远程库信息:精简版$ git remote,详细版$ git remote -v
    • 推送分支$ git push origin <master/dev>,指定本地分支,推送到远程库对应的远程分支上
      • master主分支要时刻与远程同步
      • dev开发分支要与远程同步
      • bug分支一般只用于本地修复
      • feature分支视情况而定
    • 多人协作工作模式
      • a. 首先用$ git push origin <branch-name>推送自己的修改
      • b. 如果推送失败,是因为远程分支比本地更加新,需要先用git pull试图合并
        • 如果git pull提示no tracking information,说明未创建本地分支和远程分支的链接关系
        • 本地创建和远程分支对应的分支git switch -c branch-name origin/branch-name
        • 建立本地分支和远程分支的关联git branch --set-upstream-to <branch-name> origin/<branch-name>
      • c. 如果合并时没有冲突,$ git push origin <branch-name>推送;如果合并时有冲突,则本地解决冲突,再本地提交,最后推送
  18. 标签管理

    • 切换到需要打标签的分支上:$ git switch <dev>
    • 创建当前提交的标签:$ git tag V1.0
    • 创建带说明的标签:$ git tag -a <tagname> -m "message" <commit id>
    • 补打指定标签:$ git tag V0.9 <commit id>
    • 查看所有标签:$ git tag
    • 查看某个标签详细信息:$ git show <tagname>
    • 删除本地标签:$ git tag -d <tagname>,标签存储在本地,不会自动推送到远程
    • 删除远程标签:先本地删除,后远程删除$ git push origin :refs/tags/<tagname>
    • 将所有标签推送到远程:$ git push origin --tags
    • 将指定标签推送到远程:$ git push origin <tagname>
  19. 忽略特殊文件

    • 忽略操作系统自动生成的文件,如缩略图等
    • 忽略编译生成的中间文件、可执行文件等,如.class文件
    • 忽略带有敏感信息的配置文件,如存放口令的配置文件
    • 忽略上述文件时,需要编写.gitignore
    • .gitignore文件本身要放到版本库里,并且可对.gitignore做版本管理
  20. 配置别名

    • $ git config --global alias.<别名> <原始命令>
    • $ git config --global alias.st status,以后只需要键入$ git st即可
    • -global代表全局参数,针对该电脑所有Git仓库适用
    • -global表示只对当前仓库适用

猜你喜欢

转载自blog.csdn.net/Coefficient1996/article/details/113837086
今日推荐