目录
- 一. Git基础
- 二. 个人使用Git常见场景
- 2.1 查看分支
- 2.2 怎么删除不需要的分支
- 2.3 如何修改最新commit message
- 2.4如何修改旧commit message
- 2.5 把连续的commit 合并一个
- 2.6 把不连续的commit合并成一个
- 2.7 暂存区和HEAD文件作比较
- 2.8 工作区与暂存区文件做比较
- 2.9 让暂存区恢复到和HEAD一样
- 2.10 让工作区恢复到和暂存区一样
- 2.11 让暂存区部分文件恢复到和HEAD一样
- 2.12 消除指定的几次提交(暂存区与工作区回到某一个位置)
- 2.13 比较不同分支,提交的文件差异化展示
- 2.14 删除文件的方法
- 2.15 开发中临时加塞紧急任务
- 2.16 如何指定git不管理的文件
- 2.17 如何将git仓库备份到本地
- 2.18 如何将本地仓库备份到远端
- 2.19 git clone 时重名如何处理
- 三. 把本地仓库同步到GitHub
- 四. 多人单分支集成协作常见场景
一. Git基础
1.1 git的三个作用域
git config --global user.name ‘your_name’
git config --global user.email ‘you_email@163.com’
其中缺省默认代表local
git config --local *local只对某个仓库有作用*
git config --global *global对当前用户所有仓库有作用*
git config --system *system对系统所有登录的用户有效*
显示config的配置,加–list
git config --list --local
git config --list --global
git config --list --system
1.2 建Git仓库
两种场景
- 把已有的项目代码纳入Git管理
cd 项目所在的文件夹
git init
- 新建的项目直接用Git管理
cd 某个文件夹
git init your_project # 会在当前路径下创建与项目同名的文件夹
cd your_project
如果git权限为global 在此新建一个仓库并设置权限为local 那么最后生效权限为local
放入暂存区
git add 放入暂存区的文件1 文件2
git add -u # 全部文件
放入版本历史
git commit -m'提交信息'
1.3 查看版本历史
1. git log # 查看当前分支的全部提交
2. git log --oneline # 简介查看提交信息
3. git log -n2 --oneline # 查看最近的两个commit
4. git log --all # 查看所有分支的log
5. git log --all --graph # 图形化的显示所有分支
6. git log --oneline --all
7. git log --oneline --all -n4
8. git log --oneline --all -n4 --graph
git branch -v 查看本地有多少分支
git checkout -b temp 创建分支
1.4 Git 图形管理界面
gitk
1.5 .git目录
.git文件目录
• COMMIT_EDITMSG
• config 当前 git 的配置文件
• description (仓库的描述信息文件)
• HEAD (指向当前所在的分支),例如当前在 develop 分支,实际指向地址是 refs/heads/develop
• hooks [文件夹]
• index
• info [文件夹]
• logs [文件夹]
• objects [文件夹] (存放所有的 git 对象,对象哈希值前 2 位作为文件夹名称,后 38 位作为对象文件名, 可通过 git cat-file -p 命令,拼接文件夹名称+文件名查看)
• ORIG_HEAD
• refs [文件夹]
• heads (存放当前项目的所有分支)
• tags (存放的当前项目的所有标签,又叫做里程碑)
• cat 命令, 功能:用来显示文件。 例如 cat text.md 显示 text.md 文件的内容
• ls -al 命令, 表示列出当前目录下的所有文件(包括隐藏文件)
• git cat-file -t 命令 , 查看 git 对象的类型
• git cat-file -p 命令, 查看 git 对象的内容
• git cat-file -s 命令, 查看 git 对象的大小
1.6 分离头指针
detached HEAD —这种代表切换了一个未知的分支,这种状态commit 后不会在git 中显示,日后git会自动清除,目前可以通过git branch new-branch-name 原先分支名
来保存commit
基于某一个分支创建新分支git checkout -b new-branch-name basic-branch-name
git diff HEAD HEAD^1
HEAD^1 == HEAD~1
``HEAD11 == HEAD~2`比较HEAD与其父亲提交的比较 ^1 代表父亲, 11 代表爷爷
1.7 修改本地git username 与email
git config --add --local user.name 'git2021'
git config --add --local user.email 'git2021@163.com'
查看修改:git config --local -l
修改git文件 vi .git/config
二. 个人使用Git常见场景
2.1 查看分支
git branch -av
2.2 怎么删除不需要的分支
git branch -d branch-name
如果该分支还没有merge 那么该命令无效,想删除可以使用git branch -D branch-name
2.3 如何修改最新commit message
git commit --amend
2.4如何修改旧commit message
git rebase -i father-commmitID
注意变基是在单独开发的项目中实现,不可在团队开发中使用
2.5 把连续的commit 合并一个
git rebase -i father-commitID
进去后将后几个命令改成s
2.6 把不连续的commit合并成一个
git rebase -i father-commitID
进去后,把需要合并的与第一个放在一起
2.7 暂存区和HEAD文件作比较
git diff --cached
2.8 工作区与暂存区文件做比较
git diff
工作区与暂存区所有文件的比较
git diff filename
某个文件的工作区与暂存区的比较
2.9 让暂存区恢复到和HEAD一样
git reset HEAD
2.10 让工作区恢复到和暂存区一样
git checkout -- filename
2.11 让暂存区部分文件恢复到和HEAD一样
git reset HEAD -- filename1 filename2
2.12 消除指定的几次提交(暂存区与工作区回到某一个位置)
git reset --hard commitID
2.13 比较不同分支,提交的文件差异化展示
git diff branch-name1 branch-name2 -- filename
git diff commit-ID1 commit-ID2 -- filename
2.14 删除文件的方法
git rm filename
2.15 开发中临时加塞紧急任务
git stash
任务放到一个栈里面
git stash list
查询任务
git stash apply
将栈顶的任务复制拿出来,可以无限使用
git stash pop
将栈顶任务弹出来,智能使用一次
2.16 如何指定git不管理的文件
vi .gitignore
里面放上不需要管理的文件,注意文件夹与文件的区别,如果放入doc,那么,doc以及doc下的文件夹都将被忽略,如果放入的是doc/那么对于doc本身是不会忽略的。
2.17 如何将git仓库备份到本地
- 哑协议
哑协议没有进度条
git clone --bare /Users/git_learning/.git yaxieyi.git
- 智能协议
智能协议有进度条,传输速度快
git clone --bare filr:///Users/git_learning/.git zhinneg.git
–bare 代表不加入工作区,仅仅代表备份区域
2.18 如何将本地仓库备份到远端
首先需要在远端新建一个仓库
git remote add zhinneg file:///Users/zhineng/.git
然后在本地
git push --set -upstream 仓库名 分支名
2.19 git clone 时重名如何处理
git clone 地址 name2
三. 把本地仓库同步到GitHub
- 查看远端仓库
git remote -v
- 拉取远端仓库
git remote add github ssh协议下载
git remote -v
继续查看本地仓库
四. 多人单分支集成协作常见场景
4.1 更新本地分支与远端分支一样(本地无该分支)
git checkout --track origin/branch-name
注意该命令会让本地分支与远端分支一样的名字,如果不想一个名字,那么使用
git checkout -b new_branch branch-name
如果报错显示fatal: Cannot update paths and switch to branch 'develop' at the same time. Did you intend to checkout 'origin/develop' which can not be resolved as commit?
那么
git remote -v
git fetch origin
- 然后再次执行
git checkout --track origin/branch-name
如果想要依据一个远端分支创建本地分支
git checkout -b branch-name origin/remote-branch-name
4.2 更新本地分支与远端分支一样(本地有该分支)
git push --set-upstream origin branch_name
远端创建一个分支并跟踪
4.3 不同人修改不同文件如何处理(相同分支)
- 首先看下远端分支是否有变化
git fetch github
- 然后merge 然后再push:
git merge branch-name
git push github
4.4 不同人修改同文件的不同区域如何处理
git pull
或者git fetch
+ git merge remote-branch-name
4.5 不不同人修改同一文件的同一个区域如何处理
首先第一个人写完代码push上去后,第二个人也改了同一个地方,想要直接push,此时会报错,于是他选择git pull
但是在Auto-merge的阶段,报错,这时候需要与提交者商量然后手动修改冲突。如果修改完后不想要:git merge --abort
。修改完后想要就可提交git commit -am 'commit message'
. 最后git push github
4.6 同时变更了文件名跟文件的内容
直接 git pull
4.7 多人修改同一文件的文件名
- 查看文件内容是否有差异
git diff file1 file2
只是文件名称冲突可以选择下面的方法 - 删除原先的文件名称
git rm file-name
git add file1
git status
git rm file2
git status
- commit
git commit -am 'commit message'
git status
- 最后
git push