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

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

1、设置user.name和user.email

git config --global user.name 'your_name'
git config --global user.email '[email protected]'

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常见的场景和对应的命令_第1张图片
# 工作区就是本地有.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!保存退出即可
git常见的场景和对应的命令_第2张图片
rebase命令
git常见的场景和对应的命令_第3张图片
rebase界面-修改命令
git常见的场景和对应的命令_第4张图片
修改message内容
git常见的场景和对应的命令_第5张图片
修改结果
  • 把连续的多个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```保存退出

    git常见的场景和对应的命令_第6张图片
    多个commit合并

    git常见的场景和对应的命令_第7张图片
    说明界面

    git常见的场景和对应的命令_第8张图片
    合并结果

  • 把间隔不连续的多个commit整理成1个commit
    示例:合并图中的2个commit

    git常见的场景和对应的命令_第9张图片
    目的

    1.因为要合并的其中一个commit,属于最初的父级,所以id写它的即可:git rebase -i xxx
    2.打开的文件内容中,只会有父级以外的内容(这里只有2条),所以需要手动加入最初父级的操作内容信息
    3.把要合并的commit版本的内容复制,写到要被合并的commit版本的下面,然后把pick改成s,接着删除原本的内容(如果有多条也是如此操作),然后:wq保存退出
    4.步骤3后,会跳出个说明界面;在界面中,填写本次合并的原因,并:wq保存退出

git常见的场景和对应的命令_第10张图片
步骤2

git常见的场景和对应的命令_第11张图片
步骤3

git常见的场景和对应的命令_第12张图片
步骤4

git常见的场景和对应的命令_第13张图片
合并结果
  • 清除最近的几次commit提交(把HEAD、暂存区和工作区都恢复到指定commit版本的文件情况)
    1.首先查看最近的几次提交git log
    2.恢复内容到指定的commit版本(谨慎使用):git reset --hard commit版本的hash id

    git常见的场景和对应的命令_第14张图片
    结果

  • 查看不同分支最新的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常见的场景和对应的命令_第15张图片
    结果

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

    git常见的场景和对应的命令_第16张图片
    结果

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

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

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

    git常见的场景和对应的命令_第17张图片
    结果

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

    git常见的场景和对应的命令_第18张图片
    结果

九、正确删除文件

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

十、

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

git常见的场景和对应的命令_第19张图片
步骤1-3

4-1.当修改完bug后,再回复回去: git stash apply(把stash的文件回复到工作区,但是stash中的东西不会进行删除)
git常见的场景和对应的命令_第20张图片
步骤4-1

4-2.第二种方式,就是使用 git stash pop(把stash中的内容删除,并回复到工作区)
git常见的场景和对应的命令_第21张图片
步骤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 远端分支

git常见的场景和对应的命令_第22张图片
分支关联

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

后来者进行push时,会报错

git常见的场景和对应的命令_第23张图片
冲突报错

  • 解决方法
    1.先fetch:git fetch
    2.查看分支情况:git branch -av
    3.merge合并分支(共同管理的是feature分支):git merge(如果弹出个merge页面,则代表成功了)
    4.可以cat查看下那个文件内容,确定是否合并成功
    5.再进行push:git push
    git常见的场景和对应的命令_第24张图片
    步骤3

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

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


git常见的场景和对应的命令_第25张图片
冲突错误
  • 解决方法1:手动解决冲突
    1.vim 进入冲突的文件,进行内容修改
    2.查看当前状态:git status
    3.如果我们做的变更ok的,那就直接:git commit -m "解决冲突"
    4.push到远端:git push
    git常见的场景和对应的命令_第26张图片
    冲突文件内容

    git常见的场景和对应的命令_第27张图片
    修改后的冲突文件

    git常见的场景和对应的命令_第28张图片
    status后的提示内容

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

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

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

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

git常见的场景和对应的命令_第30张图片
报错情况

  • 解决方法
    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
    git常见的场景和对应的命令_第31张图片
    status1

    git常见的场景和对应的命令_第32张图片
    status2

你可能感兴趣的:(git常见的场景和对应的命令)