Git 从入门到进阶:基础命令、分支管理与实战工具详解
·
Git 从入门到进阶:基础命令、分支管理与实战工具详解
目录
第一章 git入门
- git用户身份配置
git config --global user.name "xing"
git config --global user.email huang@exm.com
- git检查个人配置
git config --list
- 获取帮助
git help config
第二章 git基础
- 初始化git仓库
git init
- 对现有文件进行版本控制
git add *.c
git add wenjian
git commit -m"第一个文件"
- 克隆现有仓库
git clone https://gitee.com/sfsfd/myTest.git test(自定义仓库名)
- 查看当前状态
git status
- 追踪新文件
git add text
- 显示更简洁的状态信息
git status -s或者(git status --short)
例子:
$ git status -s
A hello.txt(以及add过的文件,m 为修改过的文件)
?? nihao.txt(??为未成追踪的文件)
- 忽略文件
cat .gitgnore
例子:
*.a (忽略.a类型文件)
bulid/ (忽略bulid/ 目录下的所有文件)
bulid/*.txt (忽略bulid/ 目录下的.txt文件)
- 查看已暂存和未暂存的变更
git diff (只能看到modified的文件)
git diff --staged (将暂存的变更与上一次的内容做比较)
git diff --cached (查看当前已暂存的更改)
- 提交更改
git commit -m"更改描述"
例子:
$ git commit -m "新的内容"
[master e553f82] 新的内容
2 files changed, 2 insertions(+)
create mode 100644 hello.txt
create mode 100644 nihao.txt
- 跳过暂存区
注意:两种方法的使用前提是文件之前已经提交过一次
git commit -a -m "修改" (方式一)
git commit -am "nihao修改" (方式二)
- 移除文件
git rm nihao.txt (可以把工作区的文件移除)
git rm -f hello.txt (把暂存区的文件移除,强制移除,无法修复)
git rm --cached nihao.txt (把暂存区的文件搬回到工作区)
git rm \*.log (在*前必须加上反斜杠,这条命令的功能为移除所有以.log为扩展名的文件)
- 重命名文件
git mv nihao.txt huang.txt
上述语句相当于下面的三条语句:
mv nihao.txt huang.txt
git rm nihao.txt
git add huang.txt
- 查看提交历史
git log -p -2 (-p可以看到每次提交的差异,-2为显示两条数据)
git log --stat (可以查看改动的文件,新增或删除的行)
git log --pretty=oneline (每一行显示一个提交的内容)
git log --pretty=format:"%h -%an,%ar:%s"(ar:日期,h:提交对象简短值,an:作者的名字,s:提交的主题)
git log --pretty=format:"%h - %an" --graph(--graph为简单图表显示)
git log --oneline --decorate (可以详细地看到当前分支所指向的对象)
git log --oneline --graph (更为简单的图表显示)
- 撤销操作
git commit --amend (更改commit的描述信息)
- 撤销已暂存的文件
git reset --hard hello.txt (方式一)
git restore --staged hello.txt (方式二,建议用此方式)
- 撤销对文件的修改
git restore hello.txt (方式一,建议使用)
git checkout -- hello.txt ((方式二,使用有可能导致原先的修改内容丢失,使用有风险)
- 显示远程仓库
git remote -v
- 添加远程仓库
git remote add xiao(url_name) https://gitee.com/huang/myTest.git (添加远程仓库,并名命为xiao)
git fetch xiao (拉取远程仓库数据包括远程新增加的分支,只拉取不会自动合并)
- 将数据推送到远程仓库
git push origin master
- 检查远程仓库
git remote show origin
- 删除和重命名远程仓库
重命名:
git remote rename huang xiao (把远程仓库链接的huang重命名为xiao)
删除:
git remote rm huang
- 列举标签
git tag
- 注释标签
git tag -a v1.0 -m "hello.txt" (标记版本为v1.0)
git show v1.0 (展示版本v1.0的信息)
- 轻量标签
git tag v1.1-lw
- 补加标签
git tag -a v1.3 4b2e97d
- 共享标签
git push origin v1.1 (把本地v1.1标签推送到云端)
git push origin --tags (把本地全部tag推送到云仓库)
- git别名
git config --global huang.co checkout
git config --global huang.br branch
第三章 git分支机制
- 创建新分支
git branch testing
- 切换分支
git checkout master (方式一)
git switch master (方式二)
- 分支管理
git branch (列出所有分支)
git branch -v (查看每个分支上的最新提交信息)
git branch --merged (筛选已经合并主分支的所有子分支)
git branch --no-merged (筛选没有合并主分支的所有子分支)
git branch -d huang (在已经合并前提下删除huang分支)
git branch -D huang (在没有合并到主分支下删除huang分支)
- 远程分支
git fetch origin (可以拉取远程的最新数据)
- 推送
git push origin huang (在本地huang分支上提交到远程huang分支,如果远程没有huang分支时会自动创建)
git push origin huang:huang_dev (创建远程的huang_dev分支并推送到远程的huang_dev分支上,本地的huang分支对应远程的huang_dev分支)
git checkout -b huangTesting origin/huang (创建本地的huangTesting分支,并与远程的huang分支关联在一起)
git push origin HEAD:huang (上述关联远程huang分支后提交到远程huang分支的操作)
- 跟踪分支
git checkout huang (创建本地huang分支并自动追踪远程上的huang分支)
git checkout --track origin/huang (创建本地huang分支并追踪远程上的huang分支)
git branch -vv (查看已经设置了追踪的哪些追踪分支)
- 拉取
git fetch origin (拉取远程所有最新的数据)
- 删除远程分支
git push origin --delete huang
第四章 git工具
- 修订某个版本
git log --abbrev-commit --pretty=oneline (输出记录为单行且sha1为7为数)
git show 97c2272 (展示97c2272 所对应的提交信息内容)
- 分支引用
git rev-parse huang (某个分支指向的sha1值)
git reflog (查看HEAD和分支引用记录)
git show HEAD@{2.day.ago} (查看两天前的记录)
- 祖先引用
git show head^ (查看当前父提交的前一个父提交)
- 查看提交范围
git log master..huang (huang分支上有而master分支上没有)
git log huang..master (正好与上面的相反)
- 储藏与清理
git stash (储藏未提交的内容)
git stash list (查看储藏未提交的内容)
git stash apply stash@{0} (查看某次储藏未提交的内容)
git stash drop stash@{0} (删除stash@{0}的储藏内容)
git stash show -p(-patch) (查看stash中修改的内容)
- 从储藏中创建分支
git stash branch huang_dev (创建新的huang_dev分支并包含储藏的内容)
- 清理工作目录
git clean -d -n (查看将会被清理的文件,既提示删除未被追踪的文件)
git stash --all (删除前先保存未被追踪的文件)
git clean -f (将删除所有未被追踪的文件)
- 修改最近一次提交
git commit --amend (修改最近一次提交信息,会改变sha1的值)
- 强制命令:filter-branch
git filter-branch --tree-filter 'rm -f h.txt' head (删除h.txt文件并从历史记录中删除掉,用时久,最好不要使用)
- 合并冲突
git merge huang
vi hello.txt
git commit -am "解决冲突"
- 中止合并
git merge --abort(退出合并)
git reset --hard head(回到之前想要的状态)
git merge -Xignore-space-change huang.txt(合并时忽略空白字符)
- submodule子模块(单向)
- 添加子模块
git submodule add https://gitee.com/huangxing/huangxing.git
- 把本地子模块推送到远程分支上
git add .
git commit -m"子模块"
git push
- 更新本地所有子模块上的数据
git submodule foreach git pull (本地所有的子模块都可以更新到数据)
- 删除submodule子模块的四个步骤,可同步删除本地和远端子模块
rm -rf huangxing (删除子模块文件)
git rm --cached huangxing (删除暂存区中的子模块)
git commit -m"删除submodule子模块" (提交)
git push (提交到远程服务器上)
- substree子模块:(双向、简单)
- 父文件中添加子模块
需要3步:
git remote add subtree-origin git@github.com:nihao/subtree.git (subtree-origin为链接名)
git subtree add -P huang_substree subtree-origin master (huang_substree 子模块名)
git push (将新添加的子模块推送到云端)
- 父文件中的子模块修改并提交父文件的远端
cd huang_substree
vi hello.txt
git commit -am"修改"
git push (或者退回到父文件中再push也是可以的)
- 父文件中的子模块修改并提交到子模块的远端
git subtree push -P huang_substree subtree-origin master
- 父文件的子模块拉取子模块的父内容最新数据
git subtree pull --prefix(同"-P") huang_substree subtree-origin master
- git cherry-pick的应用
git checkout master (先切回主分支)
git cherry-pick 22976cd5 (拼接sha1的值,只能一个一个来,不可跨节点操作)
git checkout 22976 (切换到创建分支前的主分支)
git branch -D test (把不用的子分支删掉)
git checkout -b test (再重新建一个子分支)
- 变基
git rebase master(从本分支变基到master分支上)
git checkout master (切回到主分支)
git merge test (合并test分支的修改)
- 变基冲突解决
方式一:
vi test.txt
git add .
git rebase --continue (继续执行变基)
git checkout master (切回到主分支)
git merge test (合并test分支的修改)
方式二:
git rebase --abort (冲突合并时回到冲突前的状态)
方式三:
git rebase --skip (则会将引起冲突的commits丢弃掉)
- git 图形化工具
gitk
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力
更多推荐



所有评论(0)