git 工作中常用命令
- 1.首次使用git
- 2.将代码加入git管理
- 3.git 重命名
- 4. 查看版本演练历史
- 5. 探究.git目录
- 6. git查看文件类型和文件内容
- 7.git 分离头指针
- 8. 切换分支
- 9. 比较2个commit的差异
- 10. 查看所有分支
- 11. 删除多余分支
- 12.对最近一次提交commit message 做变更
- 13. 修改老旧的commit message 信息做变更
- 14.把多个连续的commit 合并成一个commit
- 15.把几个不连续的commit整理为1个commit
- 16. 比较暂存区和HEAD所含文件差异
- 17.比较工作区和暂存区文件差异
- 18. 如何让暂存区恢复成和HEAD的一致
- 19.如何让工作区恢复成和暂存区一样
- 20.如何取消暂存区部分文件的更改
- 21. 消除最近几次的提交
- 22.查看不同提交时的指定文件或分支的差异
- 23.删除文件
- 24.开发中临时加塞紧急任务如何处理
- 25. 如何将git仓库备份到本地
- 26.本地仓库同步到远端
- 27. 同一分支不同人修改了不同文件如何处理
- 28. 不同人修改了同文件的不同区域如何处理
- 29. 不同人修改了同文件的同一区域如何处理
- 30. 同时变更了文件名和文件内容如何处理
- 31. 把同一文件改成了不同文件名如何处理
1.首次使用git
首次使用git,需要配置User信息
$ git config --global user.name "John Doe"
$ git config --global user.email "johndoe@example.com"
git config --local : 只对某个仓库有效
git config --global: 对当前用户所有仓库有效
git config --system: 对系统所有登录的用户有效
git config --list命令列出Git可以找到的所有设置
2.将代码加入git管理
1.将已有代码加入git管理
1、cd 已有项目文件夹下
2、git init
2.新建项目用git管理
1、cd 某个文件夹下
2、git init your project 会在当前路径下创建项目名称同名的文件夹
3.git 重命名
git mv file_from(源文件名) file_to(新文件名)
4. 查看版本演练历史
1、git log 查看提交历史
2、git log --all --graph --oneline -n4:查看所有分支 (-n4:最近4次提交)
5. 探究.git目录
|-- HEAD # 这个git项目当前处在哪个分支里,最终落脚于某个commit
|-- config # 项目的配置信息,git config命令会改动它
|-- description # 项目的描述信息
|-- hooks/ # 系统默认钩子脚本目录
|-- index # 索引文件,暂存区,一个二进制文件
|-- logs/ # 各个refs的历史信息
|-- objects/ # Git本地仓库的所有对象 (commits, trees, blobs, tags)
|— refs/ # 标识你项目里的每个分支指向了哪个提交(commit)
6. git查看文件类型和文件内容
查看文件类型:git cat-file -t 123456(commit_id)
查看文件内容:git cat-file -p 123456(commit_id)
tree:文件夹
blob:文件
7.git 分离头指针
git checkout <commit_id>
分离头指针的本质:
是工作在没有分支的情况下,如果这个时候切换了分支,在这期间做的commit和变更操作因为没有branch挂钩,所以很容易被当做垃圾处理掉
使用场景:做尝试性变更
处于分离头指针装状态修改commit后,切换回master分支,git 会提示是否保存分离头指针做的修改;保存则按照提示命令新建分支保存 ,创建一个新的分支,这个分支是基于头指针分离下修改提交的commit_id创建的
git branch <新分支名> commit_id (commit_id是在分离头指针状态下提交后的commit_id)
8. 切换分支
1、git checkout 分支名
2、git checkout 分支名1 分支名2 (基于分支名2 创建新分支1)
9. 比较2个commit的差异
1、git diff HEAD HEAD~1 :比较HEAD和HEAD祖先的差异(~2:祖先的祖先)
2、git diff commit_id1 commit_id2
10. 查看所有分支
git branch -av
11. 删除多余分支
git banch -d/-D 分支名
12.对最近一次提交commit message 做变更
git commit --amend
13. 修改老旧的commit message 信息做变更
git rebase -i+修改commit的父节点
交互页:
+reword eg: reword commit_id message
修改老旧的commit message (要修改的comit后子commit的id号会更新)
14.把多个连续的commit 合并成一个commit
git rebase -i+修改commit的父节点 (要基于某个pick的commit进行squash)
pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit
eg: pick commit_id add a
sqush commit_id add b (该提交会合并到pick 中)
15.把几个不连续的commit整理为1个commit
git rebase -i+修改commit的父节点 ,然后将不连续的commit修改位置,基于某个pick,修改其他commit 为squash
16. 比较暂存区和HEAD所含文件差异
git diff --cached
17.比较工作区和暂存区文件差异
1、git diff
2、git diff 文件名1 文件名2 基于文件查看工作区暂存区差异(多个文件空格隔开)
18. 如何让暂存区恢复成和HEAD的一致
1、git reset HEAD 工作区不会被更新,只会将暂存区恢复成HEAD
2、git reset --hard HEAD 会将工作区和暂存区恢复成HEAD
19.如何让工作区恢复成和暂存区一样
git checkout --file (file表示要恢复的文件)
20.如何取消暂存区部分文件的更改
git reset HEAD -- file (file表示要恢复的文件)
21. 消除最近几次的提交
git reset --hard commit_id (commit_id 之后的提交将会丢弃,工作区、暂存区恢复成commit_id时内容)
22.查看不同提交时的指定文件或分支的差异
1、git diff 分支1 分支2 查看2个分支的差异
2、git diff 分支1 分支2 --index.html 查看2个分支index.html 的差异
3、git diff commit_id1 commit_id2 --index.html 查看2个commit中index.html 的差异
23.删除文件
git rm -rf 要删除的文件
24.开发中临时加塞紧急任务如何处理
git stash (git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中)
git stash apply: 将数据展示出来,stash 堆栈中数据还在不会被删除。
git stash pop: 将数据展示出来,stash 堆栈中数据被删除。
25. 如何将git仓库备份到本地
常用协议 | Value |
---|---|
本地协议 | 1、path/to/repo.git (哑协议本地协议) 2、file:///path/to/repo.git (智能协议) |
http/https协议 | http://git-server/repo.git (智能协议) |
ssh协议 | user@git-server com: path/to/repo.git(智能协议) |
哑协议与智能协议区别
1、哑协议传输进度不可见;智能协议传输可见
2、传输速度:智能协议比哑协议传输速度快
备份步骤:
1、 克隆不带工作区的备份裸仓库(备份) :git clone --bare 仓库地址
2、 工作区的变更同步备份:git push <远程主机名><本地分支名>:<远程分支名>
26.本地仓库同步到远端
- 远端仓库有的文件,本地仓库没有
1、git fetch <远程仓库名> <远程分支名> 默认获取获取远端仓库全部更新,可加分支名获取对应分支更新(此时本地会有一棵独立的树)
eg: git fetch origin master 获取origin仓库master分支更新
2、git merge --allow-unrelated-histories <远端分支名> 在当前分支下合并分支(对两个不相干的树进行merge)
3、git push <远程主机名> <本地分支名>:<远程分支名> (--all 全部)将本地的分支推送到远程主机的远程分支,分支不存在则会新建
ps: git push <远程仓库> : <远程分支名> 删除远程仓库的远程分支(push了空的分支上去,相当于删除远程分支)
- 远端仓库有的文件,本地仓库也有,直接push
27. 同一分支不同人修改了不同文件如何处理
1、git fetch <远程仓库名> <远程分支名>
2、git merge 远端分支
3、git push
28. 不同人修改了同文件的不同区域如何处理
方法一:
1. git fetch <远程仓库名> <远程分支名>
2. git merge 远端分支
3. git push
方法二:
1. git pull = git fetch + git merge ,然后git push
git pull <远程主机名> <远程分支名>:<本地分支名> 取回远程主机某个分支到的更新到本地分支
eg: git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略
eg: git pull origin next
2. git push
29. 不同人修改了同文件的同一区域如何处理
1、 git pull 分支到本地(会提示冲突)
2、打开修改的文件,查看冲突内容进行修改
3、git commit / git merge --abort(退出合并分支)
4、git push
30. 同时变更了文件名和文件内容如何处理
场景:用户A把文件名变更,用户B在原文件名下做了变更,此时push至远端失败
1. git pull (git自动识别文件名变更,更新文件名)
2. git push 这时候不会报错
31. 把同一文件改成了不同文件名如何处理
1、git pull (git提示:1. 删除原文件 2. 生成2个同文件名但相同内容的文件)
2、git rm + 原文件
3、git rm +已修改文件名的文件
4、git add 最终确认的文件名的文件
5、git commit
6、git push