创建git仓库
git init
查看git仓库路径
git rev-parse --show-toplevel
git init --bare
- 指定某个目录成为中心仓库(裸仓库)
- 这样的仓库初始化后,其项目目录下就是标准仓库.git目录里的内容,没有工作空间
创建裸仓库
git init --bare
git仓库克隆
git clone [url]
git clone https://github.com/tianqixin/runoob-git-test
git clone --depth=1 depth指克隆深度,为1代表只克隆最近一次commit
git clone --depth=1 https://github.com/ARM-software/arm-trusted-firmware.git
git clone ssh://git@hostname:port/.../xxx.git
git clone xu.zhang@fae01-sz:/mnt/fileroot/xu.zhang/git_test.git
- git_test.git是个目录,是个git仓库,在该目录下有.git文件夹
克隆子仓库
git clone --recurse-submodules git@github.com:FreeRTOS/FreeRTOS.git
git submodule update --init --recursive
提交到本地仓库
git commit -s
在提交日志消息的末尾添加由提交者签名的行
git commit -s --amend
使用场景:
- 提交时不想保留上一次的记录
- 上一次的commit message的描述有误,这时候你可以使用接下来的这个命令:git commit --amend
- 不会重新提交记录,会在上一次原有的就内部进行更新
同步远程仓库内容到本地
git pull <远程主机名> <远程分支名>:<本地分支名>
- 将最新的commit拉取到本地,在暂存区(git add)的不算
git fetch
同步本地仓库内容到远程
git push [REMOTE] [BRANCH]
git push
remote 默认为 origin,如果不填的话就推送到它上面,branch 默认为当前分支
- 推送后工作区不会自动同步为最新的
- 将远程仓库同步为最新的:git reset --hard
远程仓库相关
查看远程仓库地址:
git remote -v
添加远程仓库
git remote add 【远程仓库别名】 【远程仓库地址】
git remote add review ssh://xu.zhang@scgit.amlogic.com:29418/vendor/amlogic/tv/tvhalcore.git (
删除本地分支
git branch -D bugfix/AMLOGIC-3508-zx002
删除远程分支
git push origin --delete [branch_name]
git push origin --delete bugfix/AMLOGIC-3508-zx002
git push origin --delete bugfix/AMLOGIC-3508-zx003
删除远程仓库
git remote rm 【远程仓库别名】
1. 查看所有提交
查看提交次数
git log --oneline | wc -l
git log
2. git 版本回退
命令 | 说明 |
---|---|
–mixed | 重置HEAD到另外一个commit 重置index == HEAD相匹配,但是也到此为止。working copy不会被更改 |
–soft | |
–hard |
2.1 方案一(不保留以后的版本)
git reset --hard 目标版本号
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id 退到/进到 指定commit的sha码
git push origin HEAD -- force 强退至远程
- 这样就会整个回退至目标版本号对应的状态,在这个版本后的版本提交记录就都没有了
- git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本
git reset --hard origin/master
- 忘记当前本地分支上的所有内容,并使其与origin/master完全相同
git reset --hard 【目标版本号】
- 会改变工作区内容,变为版本号内容
- git diff没有差异
git reset --soft 【目标版本号】
- 不会影响工作区内容
- git diff会显示差异信息
2.2 方案二
git reset --soft commit_id
- –soft后,目标commit ID后面的所有commit ID也会消失
- 仅仅将HEAD指针指向了commit1,暂存区和工作区还用的是commit2的
git reset HEAD^
git撤销中间的某一次提交
git revert的使用
在这里插入代码片
git status
git log
删除某次提交
在这里插入代码片
文件差异比较
git diff
- 查看工作区与缓冲区的区别
- 第一行表示 a 版本的 new.txt(变动前) 与 b 版本的 new.txt(变动后) 比较
- 第二行 index 后面两个数字表示两个文件的 hash 值(index 区域的 ae784fb 对象,与工作目录区域的 58ded58对象进行比较)。最后的六位数字是对象的模式(100代表普通文件,644代表权限)
- "—“表示变动前的版本,”+++"表示变动后的版本
- 分为两个部分,第一个是-2,3,- 表示修改前,2,3 表示第二行开始的三行,后面的+ 2,4表示修改后文件的第二行开始的四行内容
git diff --cached
- 对比暂存区(git add 之后)和版本库(git commit 之后)
git diff HEAD
- 对比工作区(未 git add)和版本库(git commit 之后)
比较当前工作区的package.json和上一次提交的内容有何差异
git diff <commit id> -- <workarea file name>
查看上次提交的文件
git diff HEAD^ HEAD --name-only
git diff忽略回车换行
git config --global core.whitespace cr-at-eol
git config --global core.autocrlf false
打patch
git format-patch -1
git format-patch bad02e32d47a8ea82b2bcb02b5e8950f23f61623 -1
patch使用
git apply --check test.patch
git apply test.patch
分支操作
git查看本地分支【当前所在分支】:
git branch
git查看远程代码分支:
git branch -r
git查看远程和本地分支:
git branch -a
创建分支
git branch brach_name
创建并切换分支
git checkout -b branch_name
分支切换
git checkout branch_name
删除分支
git branch -d dev20181018
合并分支
git merge
冲突是如何显示的
000
<<<<<<< HEAD
master_000
=======
zx001_000
>>>>>>> zx001
拉取远程分支并创建本次分支
方案一
git checkout -b 本地分支名x origin/远程分支名x
- 使用该方式会在本地新建分支x,并自动切换到该本地分支x;采用此种方法建立的本地分支会和远程分支建立映射关系
方案二
git fetch origin 远程分支名x:本地分支名x
- 使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout;采用此种方法建立的本地分支不会和远程分支建立映射关系
方案三
git pull <远程主机名> <远程分支名>:<本地分支名>
- 如果远程分支是与当前分支合并,则冒号后面的部分可以省略
6. 命令解释
git reset --merge //
远程git仓库变为下载地址
子仓库操作
添加子仓库
git submodule add [addr](子仓库远程地址)
git fetch origin
git reset --hard origin/master
git权限追踪
查看权限追踪是否开启
git config --get core.fileMode
配置为权限追踪
git config core.fileMode true
git checkout
在这里插入代码片