本文总结一些可能误解或者需要注意的指令用法
- 值得参考的博客:https://segmentfault.com/a/1190000008617626
- 更详细解释一般直接查看
git (command) -h
即可
总体概况总结
分支管理
查看本地分支
1
git branch
查看所有分支(包括远程)
1
git branch -a
删除本地分支
1
git branch -d branch_name
删除远程分支
1
git push origin :branch_name
- 将空的东西推送到远程的branch_name分支,也就是删除远程分支
新建本地分支
1
git fetch origin master:branch_name
fetch将远程分支拉取到本地的Repository中,但不修改本地工作目录,如果本地分支不存在,则新建分支
1
git pull origin master:branch_name
fetch将远程分支拉取到本地的Repository中,同时修改本地工作目录,如果本地分支不存在,则新建分支
新建远程分支
1
git push origin master:branch_name
- 将本地分支推送到远程,如果branch_name不存在,则新建分支
冲突管理
远程分支和本地分支有不同的commit
git pull
和git push
均产生reject
异常使用下面语句拉取远程分支到本地old分支并合并
1
2git fetch origin master:old
git merge old- 上面两句等价于
1
git pull origin master:old
- 上面两句等价于
如果能够快速合并,也就是相同文件没有同时被不同提交修改:
- 上面的语句将弹出一个合并窗口提示输入合并这个操作(提交)的Comment,按照提示提交保存即可
- 保存后自动生成一个以刚才的Comment命名的提交
不能快速合并时
- 上面的语句会提示我们哪些文件有合并冲突需要解决的
- 我们需要根据提示找到并修改文件中冲突
- 然后重新提交(像正常提交代码一样即可)
1
2git add .
git commit -m " "
合并完成后删除多余分支
1
git branch -d old
fetch和pull
1 | git pull == git fetch + git merge |
git diff
git diff A B
- 基于A查看B有何变化
- 显示时会自动识别为基于
a/A
看b/B
有何变化
文件恢复
恢复本地缓冲区文件到disk
- 恢复某个文件:
git checkout -- xx/xx.py
- 恢复某个文件夹下所有文件:
git checkout -- xx/*
恢复HEAD到缓冲区
- 仅恢复到缓冲区:
git reset
orgit reset HEAD
- 不仅恢复到缓冲区,同时恢复到disk:
git reset HEAD --hard
从远程拉取一个新分支
- 从远程拉取分支到本地:
git fetch origin xxx
- 此时使用
git branch -a
可以看到远程分支引用在本地 git fetch origin xxx
后,FETCH_HEAD
会指向远程xxx
分支FETCH_HEAD
是个临时的引用,可以对该分支做任意想做的操作,比如此时可用git merge FETCH_HEAD
来合并新拉取的分支
- 此时使用
- 创建本地同名新分支:
git checkout xxx
- 必须同名
git clone优化
git clone ssh:xxx
默认拉取master分支git clone -b yyy ssh:xxx
拉取yyy分支
删除本地跟踪远程分支
git branch -d --remotes origin/xxx
- 测试发现:git 1.7.1会报错,git 2.24.3没问题
git pull 和 git push 默认分支设定
git branch --set-upstream-to=origin/xxx xxx
- 经测试:git 1.7.1会报错,git 2.24.3没问题(但git pull不会生效)
添加文件到.gitignore
- 如果文件已经被添加到Git仓库中(常常出现在一些不规范的项目中),则可以考虑使用以下步骤解决:
- 假设Git仓库中已经把
.DS_Store
添加到Git仓库中 - 首先拉取项目并在
.gitignore
中添加*.DS_Store
- 执行
git rm --cached *.DS_Store
, 从缓冲区中删除所有*.DS_Store
文件,但保留本地文件 - 执行
git add .
并重新提交
- 假设Git仓库中已经把