美文网首页
git常见的场景和对应的命令

git常见的场景和对应的命令

作者: 猪儿打滚 | 来源:发表于2021-02-18 10:05 被阅读0次

    一、使用git前需要做的最小配置

    1、设置user.name和user.email

    git config --global user.name 'your_name'
    git config --global user.email 'you_email@domain.com'

    2、config的三个作用域
    git config --local # 只对某个仓库有效;缺省时,等于```local```
    git config --global # 对当前用户所有仓库有效
    git config --system # 对系统所有登录的用户有效
    

    显示config的配置,加--list即可

    git config --list --local
    git config --list --global 
    git config --list --system 
    

    q键退出查看页面

    二、创建git仓库

    有两种场景

    1、把已有的项目加入到git管理

    将本地已有项目上传到新建git仓库

    2、新建的项目加入到git管理
    cd 某个文件夹
    git init you_project # 会在当前路径下创建和项目名称同名的文件夹
    cd you_project # 该文件夹下会有个.git的隐藏文件夹,是git的核心文件,不能删
    

    三、通过commit来认识工作区和暂存区

    # 工作区就是本地有.git文件的目录
    git add index.html git-logo  # 从工作区添加到暂存区
    git commit -m "正常提交1"  # 正式提交和说明;从暂存区提交到版本历史
    

    三、提交过的文件改名

    场景:readme改名成readme.md
    方式一:

    mv readme readme.md # 删除readme ,新增readme.md 
    git add readme.md # 把readme.md 添加到暂存区
    git rm readme # 删除暂存区的readme 
    git status # 查看状态,此时git的打印区会显示readme改名成了eadme.md 
    
    • 清空暂存区的所有文件(很危险,建议不要用)
      git reset --hard

    方式二:

    git mv readme readme.md # 直接暂存区改名
    git status # 查看状态,此时git的打印区会显示readme改名成了eadme.md 
    git commit -m "readme 改名为 readme.md" # 从暂存区提交到版本历史
    

    四、查看版本演变历史日志

    git log

    • 查看列表
      git log --oneline
    • 指定最近的4次commit
      git log -n4 --oneline
    • 查看所有分支的日志
      git log -all
    • 图形化查看日志
      git log --all --graph
    • 也可以用图形化界面来查看历史日志
      gitk # 打开图形化界面

    五、分支相关的命令

    • 创建分支
      $ git branch test
    • 切换分支
      git checkout iss53
    • 创建并切换分支
      git checkout -b test
    • 查看现有分支以及关系
      git branch -av

      gitk -all
    • 删除分支
      git branch -d test
      或:
      git branch -D test

    六、commit相关的命令

    • 正式提交和说明;从暂存区提交到版本历史
      git commit -m "说明"
    • 查看commit历史日志
      git log -x,x可指定次数
    • 修改最近一次commit的message
      git commit --amend,会进入一个vi界面,可在里面对commit的message内容进行修改,操作方式和vi一样
    • 修改历史commit的message
      1.首先输入命令:git rebase -i 要修改的commit的父commit的hash id号
      2.然后在reabse界面中,进行内容修改。由于现在要对4292430开头的commit版本的message进行修改,所以相对的行中的pick改成reword,然后:wq!保存退出
      3.在步骤2后,会自动跳转到4292430开头的commit版本的vi内容页面,此时修改界面的message内容,并:wq!保存退出即可
    rebase命令 rebase界面-修改命令 修改message内容 修改结果
    • 把连续的多个commit整理成1个commit
      1.首先查看历史commit:git log -条数
      2.假设想要合并最近的4次的commit,那么则填写最旧一次的父级commit的id(也就是倒数第5次的):git rebase -i 倒数第5次的id
      3.在界面中,把需要合并的版本前面的pick改成s````;注意,要被合并到的版本内容无需改动。然后:wq保存退出 4.步骤3后,会跳出个说明界面;在界面中,填写本次合并的原因,并:wq```保存退出

      多个commit合并
      说明界面
      合并结果
    • 把间隔不连续的多个commit整理成1个commit
      示例:合并图中的2个commit

      目的
      1.因为要合并的其中一个commit,属于最初的父级,所以id写它的即可:git rebase -i xxx
      2.打开的文件内容中,只会有父级以外的内容(这里只有2条),所以需要手动加入最初父级的操作内容信息
      3.把要合并的commit版本的内容复制,写到要被合并的commit版本的下面,然后把pick改成s,接着删除原本的内容(如果有多条也是如此操作),然后:wq保存退出
      4.步骤3后,会跳出个说明界面;在界面中,填写本次合并的原因,并:wq保存退出
    步骤2
    步骤3
    步骤4
    合并结果
    • 清除最近的几次commit提交(把HEAD、暂存区和工作区都恢复到指定commit版本的文件情况)
      1.首先查看最近的几次提交git log
      2.恢复内容到指定的commit版本(谨慎使用):git reset --hard commit版本的hash id

      结果
    • 查看不同分支最新的commit的差异
      1.所有文件差异:git diff 分支名1 分支名2
      2.指定文件差异:git diff 分支名1 分支名2 -- 文件名1 文件名2 ...
      PS.其实分支名就是个指针,会指向该分支的最新一次的commit提交

    • 查看不同commit提交的差异
      1.所有文件差异:git diff commitId1 commitId2
      2.指定文件差异:git diff commitId1 commitId2 -- 文件名1 文件名2 ...

    七、暂存区相关的命令

    • 比较暂存区和head所含文件的差异(head意思是最近一次commit版本提交;也就是当前分支的文件和最近的一次commit的文件作比较)
      git diff - -cached
      1.假设当前版本历史有个test.md文件
      2.此时在本地对test.md文件进行了修改,并git add test.md到暂存区
      3.此时可以使用git diff - -cached来查看存区和head所含文件的差异

      结果
    • 比较工作区和暂存区所含文件的差异
      git diff默认就是工作区和暂存区所含文件的差异
      1.现在在本地修改test.md文件和创建一个空白test2.md文件
      2.然后git diff查看工作区和暂存区所含文件的差异
      3.结果是test2.md文件并没有出现在差异结果中,因为它还没归git管理,并且还没添加内容(注意:git是按照文件内容来进行管理的,如果2个不同文件,内容一样,在git管理中,是一个blob文件)

      结果
    • git diff
      1.默认情况,是查看工作区和暂存区所有包含文件的差异
      2.指定查看某些文件在工作区和暂存区的差异:git diff -- 文件名1 文件名2 ...
      3.如果需要查看head和暂存区的:git diff - -cached

    八、文件恢复相关的命令reset

    • 让暂存区恢复成和HEAD的一样
      有时候会出现想要把git add到暂存区的文件,恢复成和当前分支最新的commit版本(也就是HEAD)的一样:git reset HEAD -- 文件名1 文件名2 ...(不写文件名则是全部文件)

      结果
    • 让工作区恢复成和暂存区的一样checkout
      有时候会出现在本地进行文件修改后,不想要了,想要恢复成和git add到暂存区的文件内容一样:git checkout -- 文件名1 文件名2 ...(不写文件名则是全部w)

      结果

    九、正确删除文件

    • 方式1
      1.首先工作去删除文件
      2.然后暂存区删除文件:git rm 文件名
    • 方式2(推荐)
      git rm 文件名

    十、

    一部分文件在暂存区了,一部分还在工作区修改,此时有bug需要临时进行修复。此时可以把手头的工作放到一个区域,等bug修复完毕后,再把工作去回复到以前的状态。
    1.先把手头的工作放到一个区域:git stash
    2.查看stash:git stash list
    3.查看status:git status

    步骤1-3
    4-1.当修改完bug后,再回复回去:git stash apply(把stash的文件回复到工作区,但是stash中的东西不会进行删除)
    步骤4-1
    4-2.第二种方式,就是使用git stash pop(把stash中的内容删除,并回复到工作区)
    步骤4-2

    11、指定不需要git管理的文件

    .git同级目录下,创建.gitingore文件,不同语言的不一样,可参考:https://gitee.com/BattleCall/gitignore

    git fetchgit pull 的区别

    git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
    git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

    12、同个分支中,不同人修改了不同的文件

    1.克隆项目到本地:git fetch xxx
    2.查看当前项目本地分支和远端分支:git branch -av
    3.让本地分支和远端分支相关联(feature分支):git checkout -b 远端分支 本地分支
    4.添加修改的文件:git add xxx
    5.提交文件:git commit -m "aabbcc"
    ps. 如果出现远端项目的文件或内容,比本地的多或者不一样(冲突),那么则需要合并:git merge 远端分支

    分支关联

    13、同个分支中,不同人修改了同个文件的不同区域内容

    后来者进行push时,会报错

    冲突报错
    • 解决方法
      1.先fetch:git fetch
      2.查看分支情况:git branch -av
      3.merge合并分支(共同管理的是feature分支):git merge(如果弹出个merge页面,则代表成功了)
      4.可以cat查看下那个文件内容,确定是否合并成功
      5.再进行push:git push
      步骤3

    14、同个分支中,不同人修改了同个文件的同个区域的内容

    1.pull本地项目和push远程项目时,都会报这个文件的冲突错误


    冲突错误
    • 解决方法1:手动解决冲突
      1.vim 进入冲突的文件,进行内容修改
      2.查看当前状态:git status
      3.如果我们做的变更ok的,那就直接:git commit -m "解决冲突"
      4.push到远端:git push
      冲突文件内容
      修改后的冲突文件
      status后的提示内容

    15、A变更了文件名和B变更了文件的内容,同时commit,变更文件名的先push(成功),变更内容的后push(报错)

    后push的报错
    • 解决方法
      1.git能够主动帮助我们解决这个问题:git pull
      2.然后查看当前文件情况:ls -al,此时文件名和里面的内容都已经同步到最新的(新的文件名和新的内容)

    16、多人把同个文件的文件名修改成了不同的文件名

    这种情况无法直接使用get pull解决,它会把文件都拉下来,让我们手动解决这个情况

    报错情况
    • 解决方法
      1.查看下状态:git status
      2.经过协商,最终名字是index1.htm
      3.删除最初名字的文件:git rm index.htm
      4.添加想要的文件名到暂存区:git add index1.htm1
      5.删除不想要的名字的文件:git rm index2.htm
      6.查看下状态:git status
      7.提交:git commit -m "解决冲突,文件名使用index1.html"
      8.同步到远端:git push
      status1
      status2

    相关文章

      网友评论

          本文标题:git常见的场景和对应的命令

          本文链接:https://www.haomeiwen.com/subject/wwalxltx.html