Git 常用命令
bash —>脚本解释器,功能一般
zsh —>脚本解释器,功能很强大,但是,比较复杂
on my zsh —>脚本解释器,人为迭代,发布在Github上面
-
1.查看当前git版本(git bash): git --version
-
2.查看当前路径下的所有文件: ls
-
3.查看当前路径下所有文件的的详细信息:ls -al(包括是否读写,创建日期等详细信息)
-
4.清屏函数:clear
-
5.清屏函数:ctrl+L
-
6.安装on my zsh 指令:sh -c"$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
-
7.跳到对应的行数::number eg:跳转到62行 —> :62
-
8.进入vi编辑器的时候通过跳转到对应的行数删掉该行的内容:连续两下d
-
9.在桌面新建一个文件:touch test.txt
-
10.进入到当前txt文件以vi进入:vi test.txt
-
11.查看当前文件的内容:cat test.txt
-
12.复制一份当前的这个文件:cp test.txt newFileName.txt
-
13.修改当前文件的名字:mv test2.txt test3.txt
-
14.删除当前文件:rm test3.txt
-
15.比较危险的命令:rm -rf
-
16.查看指令详细介绍:man cp
Git 第三讲
-
1.创建git版本库
a.创建目录:**mkdir dieName** b.看一看git在哪里: **which git** c.在本地创建git版本库: **git init**
Git 第四讲 获得版本库
-
1.git的三种状态
a. 已修改 --->未纳入git的版本库中 b. 已暂存 --->未纳入git的版本库中 c. 已提交 --->正式纳入到git的版本库中
Git 版本管理
-
1.git clone
从远程端将版本库克隆下来,本地的版本库与远程的版本库一样的
-
2.git add
将已经修改的文件纳入到git的暂存区 —> 版本库当中
-
3.git commit
将暂存区的文件纳入到版本库当中
-
4.git rm
删除当前的所有目录,删除版本库中某个特定的文件
Git 查看信息
-
1.git help
查看一些帮助信息
-
2.git log
查看提交日志
-
3.git diff
查看当前文件在不同版本库的差别,可以与暂存区的文件和git版本库中的文件做对比
###Git 远程协助
-
1.git pull
从远程版本库中将这个文件(pull)拉取出来
-
2.git push
将暂存区的文件推送到远程git版本库
*PS: 演练实例
-
a. 用vim fileName进入都当前fileName文件—> “i” 进入编辑模式—>ESC进入命令模式—>wq保存并推出,其中,"w"代表write的意思,"q"代表quite退出的意思。
-
3.git status
查看当前工作区的状态
-
4.git rm --cached fileName
将文件从暂存区(stated)还原到已修改区
*PS: git commit 是将暂存区中所有的文件提交到本地库当中
Git 用户名还有邮箱配置
三种配置方式
-
/etc/gitconfig(几乎不会使用),针对于整个操作系统 git config --system
-
~/.gitconfig(很常用) 针对于当前用户的所有的本地仓库 git config --global
-
针对于特定项目的,.git/config文件中 git config --local
-
删除本地变量中的某个变量:git config --local --unset u ser.name
-
pwd
查看当前目录
-
git checkout --fileName
将文件回退到以前
-
echo ‘内容’ > fileName
将文件中的内容完全替换掉
-
git reset head fileName
将文件从暂存区回退到已修改
Git 第五讲 git删除、修改、添加与日志
-
1.which + 指令:显示当前指令在哪个文件夹
-
2.echo ‘hello world’ 回显当前输入的内容
-
3.echo ‘hello world’ > test2.txt 将’helloworld’ 内容
-
4.git rm fileName从版本库中删除一个文件
-
5.git reset HEAD fileName 将modify或者echo指令创建的文件从上一个区域回退到最原始的状态
-
6.git checkout – fileName 将之前针对这个文件的操作全部撤销(特指用VI进入文件内容,而去修改文件的内容)
re -
7.git rm:指令 1. 删除了一个文件 2.将被删除的文件纳入到暂存区—>需要 git commit进行确认提交
-
8.将被删除的文件恢复,需要进行两步操作 1.git reset HEAD fileName 2 .git checkout – fileName,其中第一步操作是将文件从暂存区恢复到commit,第二步操作是将文件里面的内容恢复
-
9.rm指令:完成了一件事将文件删除掉了,这时,被删除的文件并未纳入到暂存区当中,如果想要将文件恢复,需要做以下操作1.git add fileName将文件重新纳入暂存区,剩下的步骤同8
-
10.git mv 原文件名 新文件名将文件重命名 eg:git mv text.txt text2.txt,完成两件事情1.纳入到暂存区2.重命名
-
11.mv sourceName TargetName 只是单纯的重命名(该命令存在疑问中…)
-
12.git add .将当前目录及其子目录中修改的文件一并纳入到暂存区当中
-
13.git commit --amend -m ‘日志信息’ 替换提交的日志信息
-
14.log日志牛逼指令:git log --pretty=format:%h - %an, %ar : %s
-
15.git帮助文档 1.git help config 2.git config --help 3.man git -config
Git 第六讲 .gitgnore与分支讲解
-
- git支持通配符
-
- !lib.a 除了lib.a其他文件忽略
-
- "*“忽略一层目录,”"或略多层目录**
-
- /TODO 忽略项目根目录下面的TODO文件
-
- doc/*.txt 忽略doc/notes.txt但是不包括odc/service/arch.txt
-
- git brance 列出当前版本库中所有的分支
-
- git branch branchName 创建一个新的分支
-
- git checkout branchName切换到另外一个git分支
Git 第七讲 分支重要操作
-
1.git branch -d branchName 删除一个分支
-
2.git checkout -b branchName 创建一个分支的同时并进入该分支
-
3.shift + g跳到第一行,shift +a跳到最后一行 + 回车跳到下一行 删除一个分支
-
4.git merge branchName 合并分支
-
5.git branch -v 显示当前分支所提交的最后一条信息
-
6.冲突解决方案: 1. 将不想要的内容删掉 2.解决之后调用git add fileName来告诉git冲突解决,并不是将文件添加到暂存区 3.git commit 表示本次冲突正式结束
Git 第八讲 分支重要操作
-
1.git merge - -no-ff dev 合并时加上会禁用fast-forward,这样会多出一个commit id
-
2.以分组的形式查看日志:git log -graph
-
3.git config --local user.name '张三’
-
4.git config --local user.email 'test@qq.com’
-
5.git log --abbrev-commit 显示编码的时候只是显示几行
-
6.git log --graph --pretty=oneline --abbrev-commit 在一行中显示
-
7.git reset --hard HEAD^ 回退到上一个版本
-
8.git reset --hard HEAD~1 往上回退几个版本
-
9.git reset --hard commit id回退到该commit id所对应的版本
-
10git refleg 查看操作日志
Git 第九讲 checkout进阶与stash
-
1.git checkout – fileName 丢弃掉相对于暂存区中最后一个添加的文件内容所做的变更(PS:中间确实有两个 – 与checkout和fileName分开)
-
2.git checkout commit id 切换到对应的commit分支,这里面设计了一些操作 1.修改文件不能提交 2. 需要创建新的分支
-
3.git branch -m oldBranchName newBranchName分支修改名字
-
4.git stash 将在本分支上面的所操作的嗦哦与内容保存起来
-
5.git stash list 将所保存的状态全部列出来
-
6.git stash save 'xxx’添加一些保存信息
-
7.git stash pop恢复最新的提交状态,包括两步操作 1.恢复到最新的暂存状态 2.恢复之后删除最新的提交状态
-
8.git stash apply 恢复最新的提交状态,包括两步操作 1.恢复到最新的暂存状态 2.恢复之后并不删除最新的提交状态
-
9.git stash drop stash@{number} 手动删除掉stahs的暂存信息
Git 第十讲 标签与diff
-
1.git 标签 1.轻量级标签:只有一个标签名,只能通过标签名来理解标签的意思。 2.重量级标签(带有附注的标签):除了有标签之外,还带有注释
-
2.git tag tagName 创建一个轻量级标签 eg: git tag v1.0.1
-
3.git tag -a tagName -m 'remark context’
-
4.git tag 查看当前版本库中所有的标签
-
5.git tag -l ‘查找匹配方式’ eg:git tag -l 'v1.0’
-
6.git tag -l ‘查找匹配方式’ eg:git tag -l 'v’ 支持模糊查找,后面匹配N个字段
-
7.git tag -d tagName 删除一个标签
-
8.git blame 将上一次版本的作者信息以及修改的行信息显示出来
-
9.diff linux系统自带命令,查看两个文件之间的差异性 eg: diff fileA fileB
-
10.diff -u fileA fileB 更加详细化滴展现出来
-
11.当我们进行两个文件的比较时候(工作区与暂存区),暂存区的文件作为源文件
-
12.git diff 直接比较的是暂存区与工作区之间的差别
-
13.git diff commit_id/HEAD 比较的内容是 版本库与工作区的差别或者与最新一次暂存区内容的比较
-
14.git diff --cached commit_id比较的是版本库与某一次特定的提交(暂存区)之间的区别
下面,我们来进行一些复习。复习一下diff函数,主要是关于git的应用
- a.我依稀记得第一个指令使用来比较 工作区与暂存区之间的比较,其中以暂存区为resource暂存区为target git diff -u
- b.我们来复习下一个指令,下一个指令是 git diff commit_id/HEAD,分析:既然都涉及到HEAD了,那么我们猜测是工作区与域空间的内容进行比较的,指令确实是比较工作区与域空间的比较,其中是以域空间为基准的
- c.剩下的最后一个操作的指令已经不难猜测了,那么一定比较的是暂存区与域空间之间的比较
测试完毕。
Git 第十一讲 远程与GitHub
-
1.git remote add origin Url 以后用origin代表后面的这一个长串的Url
-
2.git push -u origin master 将本地Master分支上的文件推送到远程服务器(第一次是进行关联,以后就不需要进行关联了)
Git 第十二讲 Git远程操作
-
1.git remote show 显示所有远程仓库的别名
-
2.git commit -am ‘renark’ add 与 commit 合二为一
-
3.git config --global push.default simple 意思待定
-
4.which ssh-keygen patty Windows上面可以生成秘钥的软件
-
5.ssh-keygen PS:现在windows也可以生成,产生一个秘钥的指令
-
6.git remote show origin 展现一些信息,eg: fetch url,Push url 以及当前的HEAD指针所指位置git
Git 第十三讲 Git协作
-
1.git remote show 将远程版本仓库的名字显示出来
-
2.git remote show originName 将originName的详细信息展现出来
-
3.git branch -a列出远程分支
Git 第十四讲 Git远程协作模型
-
1.git branch -av 将远程分支最后一次提交信息显示出来
-
2.git clone url 将远程版本库的所有信息给克隆到本地
-
3.git clone url gitName不再是远程版本库的名字,而是gitName的名字
-
4.git remote show origin 将远程版本库的信息信息与本地版本库的信息全部展现出来并说明不同
-
5.git config --local --list 显示当前仓库的配置信息 Ps:基本上属于用的最多的
-
6.git config --global --list 显示当前用户的配置信息
-
7.git config --system --list 显示当前系统的配置信息
-
8.git pull 从远程拉取最新的代码
Git 第十五讲 Git分支最佳实践
-
1.git add 的三种意思 a.将未追踪的文件加入到追踪列表当中 b.将已经追踪的文件纳入到暂存区 c.当文件起了冲突的时候,你需要去手动的去修改这个冲突,调用指令表示这个冲突已经被你解决掉了
-
2.一整套完整的操作,当你不使用git pull 从远程端拉取最新代码的时候,转而使用git fetch的时候首先,不管怎么样他都不会失败,因为,她仅仅是将代码从远程拉取到本地的origin/master分支上面,当你使用git branch -av查看本地与远程版本库区别的时候,假定你在本地提交过一次,那么会提示你超越了一个版本以及落后了一个版本,之后当你使用git merge origin/master的时候,会产生和直接从远程pull一样的冲突,解决方法同正常解决冲突的方法,冲突解决之后需要再提交一次,将版本进行同步
-
3.git上面的分支介绍 a. master分支, 生产环境的代码(变化不频繁) b.test分支,测试环境的代码(供测试人员测试) c.develop分支,日常开发分支(变化最为频繁的一个分支) d.hitfix分支,紧急Bug处理分支(最好不用)
Git 第十六讲 Git远程分支、别名、gitk与gitGUI
-
1.gitk在git仓库敲gitk命令即可打开gitk工具
-
2.git gui 进入到git的可视化界面
Git 第十七讲 Git refspec
-
1.git config --global alias.br branh
-
2.**git ~/.gitconfig 可以查看当前依赖别名 **
-
3.vi ~/.gitconfig 查看配置文件
-
4.git config --global alias.ui ‘!gitk’ 用单引号引上的说明是引用外部的命令
-
5.number1,number2d快速删除number行到number2
-
6.git checkout -b develop 此代码的意思是创建一个develop的分支并且切换到develop分支上面去
-
7.git branch test 创建一个test分支
-
8.git checkout -b develop origin/develop将远程同步到本地的分支拉取到本地新建的develop分支
-
9.git push -u origin branchName 这个指令需要去验证
-
10.git checkout --track origin/test 等同于git checkout -b test origin/test
-
11.git branch -d develop 将本地develop分支删除
-
12.git push origin src:dest git push命令的完整写法,解释过来什么意思呢就是 src是本地分支,dest远程分支
-
13.git push origin :develop 将一个空的分支推送到远程服务器,换句话说就是将远程服务器删掉
-
14.git push origin --delete develop 将远程版本库中的develop分支删除
-
15.git push origin HEAD:branchName 当本地分支与远程分支不同的时候,执行此命令
-
16.git pull --rebase origin master 拉取远程的文件把本地的覆盖,再上传(这个命令比较牛~)
-
17.git push -f origin master/git push origin master -f 本地强制上传到远程,把远程的覆盖
-
18.fatal: refusing to merge unrelated histories 这是因为远程仓库已经存在代码记录了,并且那部分代码没有和本地仓库进行关联,我们可以使用如下操作允许pull未关联的远程仓库旧代码: git pull origin master --allow-unrelated-histories 这样,就关联了远程仓库; 然后我们可以push代码了:git push origin master
Git 第十八讲 Git refspec 与远程标签
-
1.git pull的完整指令: git pull origin srcBranch:destBranch 其中,srcBranch指的是远程github的分支,相反的destBranch指的是本地的分支,错了呀,其中src指的是从哪里来,dest指的是去哪里
-
2.HEAD标记:HEAD文件是一个指向你当前所在分支的引用标识符,该文件内部并不包含SHA-1值,而是一个指向另外一个引用的指针
-
3.git commit 当执行此命令时,git会创建一个commit对象,并且将这个commit对象的parent指针设置为HEAD所指向的引用的SHA-1值
-
4.symbolic-ref实现对HEAD文件的读写:git symbolic-ref HEAD
-
5.git symbolic-ref HEAD refs/heads/develop 实现HEAD文件的修改,较为安全因为会存在记录
-
6.列出本地所有标签 git tag
-
7.git tag vxxx 创建一个标签 eg: git tag v1.09
-
8.git tag -a v2.0 -m ‘v2.0 released’ 创建一个带有注释的标签
-
9.git show v1.0 查看标签
-
10.git tag -l ‘v1.0’ 标签的搜索功能
-
11.git push origin v1.0 将带有标签的本地文件推送到远程
-
12.git push origin --tags 一次性将本地未推送的分支推送到远程
Git 第十九讲 Git远程分支底层剖析
-
1.git push origin :refs/tags/xxx 删除远程标签
-
2.git push origin --delete tag v5.0 将远程分支v5.0删除
-
3.git tag -d v5.0 将本地的某个标签删除
daxxxxxxxx -
4.git push origin refs/tags/v7.0:refs/tags/v7.0 将本地的某个分支推送到远程的某个分支
-
5.git fetch origin tag v7.0 拉取远程的某个标签
-
6.git push origin --delete develop 删除远程的某个分支
-
7.git remote prune origin 将远程某个游离的分支干掉
-
8.git branch -av 显示出本地与远程分支
-
9.git log origin/master,git log remotes/origin/master,git log refs/remotes/origin/master 将远程分支上的日志打印出来
-
10.git fetch origin master:refs/remotes/origin/mymaster 将远程分支master拉取到本地的mymaster分支上面,之后可以敲git checkout --track origin/mymaster 追踪远程的分支
Git 第二十讲 Git gc
- 1.查看配置文件-refs-heads里面的分支都存储了那一次commit_id
- 2.refs目录结构图
- 3.当本地拥有该分支,远程却没有该分支的时候
-
4.git mv hello.txt hello2.txt 其真实指令如下: 1 .mv hello.txt hello2.txt 2.git rm hello.txt git add hello2.txt
-
5.git remote rename origin origin2修改远程分支的名字
Git 第二十一讲 Git裸库与Submodule
-
1.git init --bare 创建一个裸库,多在服务器上用到,没有工作区的git仓库
-
2.git push --set-upstream origin master 将一个本地存在而远程不存在的分支推送到远程GitHub上面
-
3.git submodule add origin(git@github.com:xueh0430/git_child.git) mymodule 将要被依赖的子模块添加到本地的不存在目录
-
4.git submodule foreach git pull 一次性将该项目所关联的所有子模块全部拉取下来
-
5.git clone url git_parent2 将远程的项目克隆到本地
-
6.当使用git clone 从远程克隆包含子项目的项目到本地的时候,克隆的子模块会为NULL所以我们会先为子模块执行初始化操作 git submodule init
在执行git submodule update --recursive 命令,更新远程模块
-
7.git rm --cached mydule 将mymodule从暂存区删除
-
8.rm -rf mymodule 将mymodule从工作区删除
-
9.git add . —> git commit -m '展示信息’
-
10.rm .gitmodules 将配置文件删除
将子模块删除 7~10
Git 第二十二讲 Git subtree
-
1.git remote add subtree-origin git@github.com:xueh0430/gitlecture.git添加一个远程的子模块
-
2.git subtree add --prefix=subtree subtree-origin master将远程的git克隆到本地的subtree目录下
-
3.git subtree pull --prefix=subtree subtree-origin master --squash 父模块从远端拉取子模块的代码
-
4.git subtree push --prefix=subtree subtree-origin master 在父模块中对子模块的的修改也推送到远程的子模块当中去
Git 第二十三讲 Git subtree原理深度剖析
- 1.所遇到的问题:我们在包含子模块的项目中修改子模块中的文件,其中在真正的子模块中是可以pull下来的,之后再真正的子模块中修改了这个文件,在push上去,之后再包含了子模块的parent中pull不下来这个修改的文件
Git 第二十四讲 Git cherry-pick
-
1.echo ‘hello2’ >> test.txt将内容追加到文件末尾(下一行)
-
2.git cherry-pick commitID 将错误的提交分支信息纠正为正确的提交
Git 第二十五讲 Git rebase原理深度剖析
-
rebase注意事项:
-
rebase过程中也会出现冲突
-
解决冲突后,使用git add添加,然后执行
-
git rebase --continue
-
接了下来Git会继续应用余下的补丁
-
任何时候都可以通过如下命令终止rebase,分支会恢复到rebase开始前的状态
-
git rebase --abort
Git 第二十六讲 Git rebase实战
-
1.不要对master分支执行rebase,否则会引起很多问题
-
2.一般来说,执行rebase的分支都是自己的本地分支,没有推送到远程版本库
-
3.将分支A上的内容合并到分支B上 在B的分支上执行 git merge A
-
4.把develop merge 到test上面所以切换到test上面
-
5.git rebase --abort 中止一切变基操作