对于Git的重新学习记录

安装

  • 直接在git的官网上用安装包进行安装

  • 安装之后添加用户

    git config --global user.name "Your Name"

    git config --global user.email "[email protected]"

  • 查看当前全局的设置

    git config --global --list

基础使用

  • 显示隐藏文件

    ls -ah

  • 初始化仓库

    git init

  • 将文件添加到git仓库

    1. git add <filename> or git add .
    2. git commit -m 'message'
  • 查看git仓库的改变

    git status 查看仓库工作区大的状态

    git diff <filename> 查看文件的详细变化

版本回退

  • 工作区,暂存区,分支master

  • 每一次提交记录都会保存, 每一次提交会自动组成一条时间线,如下图所示

    对于Git的重新学习记录

  • 查看每次提交的记录

    git log

    git log --pertty=oneline简洁输出只一行

  • 回退版本

    git reset --hard HEAD~<n> or git reset --hard <commit_id>
    n表示回退到上n层的版本, commit_id 为每次提交的版本好

    注意回退之后不会出现回退之前的版本记录了, 就可以使用

    git reflog 来查看所有的记录

撤销修改

  1. 在工作区做了修改,没有提交

    使用命令git checkout -- <filename> 会回退到最近一次git commit的状态

    or git restore <filename>

  2. 已经修改和提交

    撤销暂存区的提交,回退到工作区

    git restore --staged <filename>

    or git reset HEAD <filename>

  3. 已经修改文件提交暂存区再提交到了版本库

    使用版本回退

远程仓库

关联远程仓库

  1. 本地有仓库,关联远程空白仓库

    git remote add <origin_name> <git_name>

    origin_name 为远程仓库名,git_name 为仓库地址

  2. 本地仓库推送到远程仓库, 第一次推送使用

    git push -u origin master

    之后推送使用git push origin master即可

分支

  • 创建一个分支

    git branch <branch_name>

  • 查看所有分支

    git branch

  • 切换分支

    git checkout <branch_name> or git switch <branch_name>

  • 创建并切换分支

    git checkout -b <branch_name> or git switch -c <branch_name>

  • 合并分支

    Fast-forward模式

    git merge <branch_name>

    将指定分支合并到当前分支下

    速度快,是将master指向dev分支

  • 删除分支

    git branch -d <branch_name>

合并分支发生冲突

  • 当创建一个分支,创建修改了内容,提交。在切换到主分支,在主分支上也修改了内容,提交。使用合并命令就会发生冲突。如下图
    对于Git的重新学习记录
  • 使用git status查看是哪个文件,使用vim <filename>打开文件
    对于Git的重新学习记录

可以看到,两个分支的冲突在哪,修改某一分支的内容,再提交

  • 查看提交记录合并图

    git log --graph --pretty=oneline --abbrev-commit

    对于Git的重新学习记录

  • 禁用fast-forword合并分支

    git merge --no-ff -m "merge no-ff" dev
    并且合并后进行提交

bug分支

  1. 当出现bug时候,从主分支创建一个bug分支,来修复bug,命名为issue-101, 切换当前分支。
  2. 修复bug并提交,再切换到master分支上,对issue-101进行合并删除,使用禁用fast-forwrad模式并提交
  3. dev分支上也有bug,是不是也需要再进行同样的操作呢,并不需要,只需要切换到dev分支上,执行git cherry-pick <commit_id>, 复制一个特定的提交到当前分支

保存工作区的修改

  1. 有时候工作区的修改没有完成也无法提交,但是你立即需要修改bug,那就需要将工作区的修改保存下来了,使用命令git stash, 会保存当前分支的修改
  2. 使用git stash list查看在当前分支下保存的列表
  3. 使用git stash pop 会恢复最顶层的保存的修改,就像栈一样。这个命令是回复并删除 or git stash aplly 恢复,git stash drop删除,使用git stash aplly [email protected]{<id>} 因为可以多次保存,所以可以指定恢复保存的修改

没有合并分支,直接删除分支

  • git branch -D <branch_name>

多人合作

  1. 现在本地推送了dev分支,没有建立联系,远程库有master,dev分支
    对于Git的重新学习记录

  2. 在另外一个文件夹clone这个远程库, 使用git brnach查看当前分支,发现只有master分支,因此使用

    git checkout -b origin/dev dev从远程库的dev创建本地的dev分支,会自动建立联系

  3. 在dev分支上进行修改,提交,推送, git push origin dev

  4. 在原来的本地仓库下,在dev分支下进行修改提交,再推送,发现出现错误
    对于Git的重新学习记录

  5. 发现有冲突,因此需要先抓取远程分支,git pull
    对于Git的重新学习记录
    提示当前分支没有跟踪信息,就是没有与远程分支建立联系,无法拉取并合并,根据提示使用

    git branch --set-upstream-to=origin/dev dev

    再进行git pull, 发现当前合并有冲突,因此需要修改冲突,提交,再进行推送

标签

  • 在git中使用标签,每一个tag就代表了一个commit,这样不需要每次都是使用commit_id

  • 创建标签

    git tag <tag_name> 在当前分支下创建标签

    git tag -a <tag_name> -m <info> <commmit_id> 创建标签,-a 标签名,-m 信息,<commit_id> 指定提交的版本

  • 查看当前分支

    git tag

  • 删除分支

    git tag -d <tag_name>

远程标签

  • 推送分支

    git push origin <tag_name>

  • 推送所有分支

    git push origin --tags

  • 删除远程分支

    1. 先删除本地分支,git tag -d <tag_name>

    2. 再删除远程分支, git push origin :refs/origin/<tag_name>

参考网站

廖雪峰的git教程

注意

之前添加了SSH密码导致每一次提交远程的时候,都要输入密码

解决方法就是将密码设置为空

  1. 输入ssh-****** -p
    对于Git的重新学习记录

  2. 输入你原来的密码

  3. 输入新密码,按下enter, 再次输入再按下enter, 解决了问题

    对于Git的重新学习记录