1、设置本地账户和邮箱
-- 指定某个具体的仓库用户
git config --local user.name 'test'
git config --local user.email 'test.com'
-- 全局所有的仓库用户
git config --global user.name 'test'
git config --global user.email 'test.com'
-- 所有系统登录的用户
git config --system user.name 'test'
git config --system user.email 'test.com'
-- Show all user accounts
git config --local --list
git config --global --list
git config --system --list
2、填加到暂存区并提交
-- 填加指定文件到暂存区
git add readme
-- 填加 git stasus 监控中的文件到暂存区
git add -u
-- 填加所有变动的文件到暂存区
git add .
--提交到版本仓库
git commit -m'Add readme'
--填加指定文件到暂存区并同时提交到版本仓库
git commit -am'Add readme'
3、清除暂存区变动
-- 清除暂存区所有变动,恢复仓库改动前的初始状态
git reset --hard
4、重命名文件
-- 直接重命名readme 文件 (将三个步骤合并成一个:1. mv readme readme.md 2.git add readme.md 3. git rm readme)
git mv readme readme.md
5、版本历史
-- 显示所有版本历史
git log
-- 简洁的显示所有版本历史
git log --oneline
-- 可以指定数量 并且 简洁显示
git log -1
git log -n4
git log -n4 --oneline
6、本地分支
-- 查看本地有多少分支
git branch -v
-- 查看本地和远程有多少分支
git branch -av
-- 根据某个版本创建一个分支,并切换到该分支
git checkout -b temp 89f15e6
-- 此时只显示当前分支的提交历史
git log
-- 显示所有分支的提交历史
git log --all
-- 显示所有分支的提交历史(图形化显示)
git log --all --graph
-- 简洁的 显示所有分支的提交历史(图形化显示)
git log --all --oneline --graph
-- 简洁的 显示所有分支的提交历史(图形化显示) 指定数量
git log --all --oneline --graph -n4
7、git自带图形化工具
gitk
gitk --all
8、查看文件的类型
-- 查看类型
git cat-file -t aceled38t2b
-- 查看内容
git cat-file -p aceled38t2b
-- 查询文件目录内容
find .git/objects -type f
9、分离头指针
-- 意思是切换到了一个没有分支名的分支,这个分支,在你切换回其他分支后,大概率会被git回收
git checkout 998c38813
-- 一般用作尝试测试代码,试验,可以使用,测试完切换其他分支,废弃就好
-- 给分离头指针创建分支名称
git branch fix_css 998c38813
10、分支对比
-- 指定分支对比
git diff 3d32423 ds23423412
-- 当前HEAD分支 与 父级分支 对比
git diff HEAD HEAD^
git diff HEAD HEAD~1
-- 当前HEAD分支 与 父级分支的父级 对比
git diff HEAD HEAD^^
git diff HEAD HEAD~2
-- 当前HEAD分支 与 父级分支的父级 对比 以此类推
git diff HEAD HEAD^^
git diff HEAD HEAD~2
11、分支删除
-- 删除分支
git branch -d ds23423423
-- 删除没有进行meager的分支
git branch -D ds23423423
12、修改commit中的message
-- 修改最新一次的commit中的message
git commit --amend
-- 修改旧的commit中的message
-- 首先进入第一个页面,将 pick 修改为 r , 然后wq! 进入第二个页面修改message即可 (原理是采有分离头指针,作为中介进行变更)
-- 只能用于本地未提交远程仓库时,如果修改已经提交到远程仓库的commit信息,可能会使其他协作者的分支有问题。
git rebase -i 3d1121323132(要修改的commit的父级commit ID)
13、把连续的多个commit合并成一个commit
-- 首先进入第一个页面,将 要合并的commit 前面的 pick 修改为 s 除了父级pick, 要合并的commit 前的pick 也要保留一个, 其余全改成 s 然后wq!
进入第二个页面新增 message,整合 message 即可
git rebase -i 3d1121323132(要修改的commit的父级commit ID)
14、把间隔的多个commit合并成一个commit
-- 首先进入第一个页面,将 要合并的commit 前面的 pick 修改为 s 除了父级pick, 要合并的commit 移动到一起,然后把前面的pick 也要保留一个, 其余全改成 s 然后wq!
进入第二个页面新增 message,整合 message 即可
git rebase -i 3d1121323132(要修改的commit的父级commit ID)
-- 如果没有跳转第二个页面,则执行下面语句
git rebase --continue
15、对比暂存区和HEAD之间的差异
git diff --cached
16、对比工作区和暂存区之间的差异
-- 默认显示所有变动
git diff
-- 指定显示某个文件的变动
git diff -- readme.md
-- 指定显示多个文件的变动
git diff -- readme.md style/style.css
17、将暂存区恢复成和HEAD一样(意思是取消暂存区内的文件修改)
-- 取消暂存区所有的add
git reset HEAD
-- 取消 工作区 和 暂存区 所有变动,恢复到HEAD时的状态
git reset --hard HEAD
-- 取消暂存区指定的一个add
git reset HEAD readme.md
git reset HEAD -- readme.md
git restore --staged readme.md
-- 取消暂存区指定的多个add
git reset HEAD readme.md style/style.css
git reset HEAD -- readme.md style/style.css
git restore --staged readme.md style/style.css
18、将工作区恢复成和暂存区一样(意思是取消工作区内的文件修改)
-- 取消工作区指定的一个文件修改
git checkout -- index.html
git restore -- index.html
19、消除最近的几次commit提交(会丢掉之前的修改)慎用!!
git reset --hard d2341dsf3
-- 取消 工作区 和 暂存区 所有变动,恢复到HEAD时的状态
git reset --hard HEAD
20、查看不同提交(commit)的指定文件的差异
-- 显示所有的文件的差异
git diff temp master
-- 显示指定的文件的差异(此处采用分支名进行比较, 也可以用commit ID)
git diff temp master -- index.html
21、正确的删除文件
-- 一般情况 先工作啊删除readme 再git rm readme 提交到暂存区
rm readme
git rm readme
-- git 中 正确的删除 直接删除并提交到暂存区
git rm readme
22、新增其他紧急任务时,工作区变动保存到隐藏区
-- 保存起来
git stash
-- 查看所有的stash
git stash list
--恢复 隐藏区的变动 到 工作区 同时 仍然 丢掉 隐藏区 保存的已有记录
git stash pop
--恢复 隐藏区的变动 到 工作区 同时 隐藏区 仍然保存的有记录
git stash apply
23、指定不需要Git管理的文件
-- 新增 .gitignore文件
echo "doc" > .gitignore
-- doc 和 doc\ 的区别
-- doc 包含 doc 和 doc\ 文件夹
-- doc\ 只包含 doc\ 文件夹
24、Git 仓库备份到本地
-- 哑协议 传输过程不可见 --bare 不包含工作区
git clone --bare /test/git_learnging/.git ya.git
-- 智能协议 传输过程可见 速度较快
git clone --bare file:///test/git_learnging/.git zhineng.git
25、指定远程仓库
-- 查看仓库对应的所有的远程地址
git remote -v
-- 填加远程仓库的地址
git remote add zhineng file:///test/git_learnging/.git
-- 删除远程仓库的地址
git remote remove zhineng
26、同一文件遇到冲突
-- 先 vim 修改 冲突文件
-- 查看状态
git status
-- 提交处理冲突之后的commit
git commit -am'Resolved conflict by hand with 4 git commands'
-- 返回修改冲突之前的状态
git merge --abort
26、同一文件名修改遇到冲突
-- 更新到本地
git pull
-- 查看状态
git status
-- 将不需要的删掉
git rm index.htm
-- 提交即可
git commit -am'fix: index.html1 to indexhtml2'
27、把本地仓库同步到GitHub
git remote add github git@github.com:test/git_learning.git
git remote -v
-- 把所有的分支和其内容 推送到github 上
git push github --all
28、将github上的 master 分支 同步到本地 master (不相连的两个master)
git pull github master
等同于 执行了以下两个命令
git fetch github master
git merge --allow-unrelated-histories github/master
-- 此时会跳出页面,填写merge的原因,不想写,wq! 退出即可