git操作和命令
git基本流程与基本概念
- workspace : 工作区,通俗来讲就是你在文件系统,ide中看到的文件,你可以直接修改的文件
- index : 暂存区 , 一个本地的缓冲区
- local repository : 本地仓库,里面有远程分支和本地分支, 处于本地,你不可以直接对其经行修改
- remote repository : 远程仓库,位于git服务器上,有效文件最终要提交到的地方
命令
一、 git clone
- 从远程主机克隆一个版本库
- 克隆版本库的时候,所使用的远程主机默认为origin。如果想用其他的主机名,需要用git clone命令的选项指定。
1.1 git clone <版本库的网址> <本地目录名> -o 设置远程主机名称
本地目录名不写,默认生成远程主机的版本库同名的目录
git clone https://gitee.com/DanShenGuiZu/learnDemo.git
git clone https://gitee.com/DanShenGuiZu/learnDemo.git learnDemo2
git clone https://gitee.com/DanShenGuiZu/learnDemo.git learnDemo3 -o master3
二、 git remote
- 用于管理主机名
2.1 git remote
- 列出所有远程主机。
2.2 git remote -v
- 参看远程主机的网址
2.3 git remote show <主机名>
-
查看该主机的详细信息
git remote show master3
2.4 git remote add <主机名> <网址>
-
用于添加远程主机名
git remote add master4 https://gitee.com/DanShenGuiZu/learnDemo.git
2.5 git remote rm <主机名>
-
用于删除远程主机名
git remote rm master4
2.6 git remote rename <原主机名> <新主机名>
-
用于远程主机名
git remote rename master3 master33
三、git fetch
- 将远程主机版本库中有更新的代码,取回本地,取回的代码对你本地的代码没有影响。
- 默认取回所有分支(branch)的更新
- 想取回特定分支的更新,可以指定分支名。
3.1 git fetch <远程主机名>
-
上面命令将某个远程主机的更新,全部取回本地。
git fetch master33
3.2 git fetch <远程主机名> <分支名>
git fetch master33 master
- 将master33主机的master分支 ,全部取回本地
四、git branch
使用git fetch后(取回的更新),我们读取分支的命令
4.1 git branch -r
- 可以用来查看远程分支
4.2 git branch -a
- 查看所有分支
4.2.1解释
- master :本地主机的当前分支是master
remotes/master33/HEAD -> master33/master
remotes/master33/master :远程主机分支是master33/master
4.3 git branch
- 列出本地已经存在的分支,并且在当前分支的前面加*号标记
4.3 git branch branch5
- 创建一个新的本地分支branch5,需要注意,此处只是创建分支,不进行分支切换
4.4 git branch -m | -M oldbranch newbranch
-
重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名
git branch -m branch5 branch6
4.5 git branch -d | -D branchname
-
删除branchname分支
git branch -d branch6
4.6 git branch -d -r branchname 删除远程branchname分支
git branch -d -r master44/branch4
五、git checkout
- 创建一个新的分支
5.1 git checkout -b 新分支名称 远程分支名称
-
通过远程分支.创建一个新的分支
git checkout -b branch2 master33/master
六、git pull
- 取回远程主机某个分支的更新,再与本地的指定分支合并
6.1 git pull <远程主机名> <远程分支名>:<本地分支名>
- 取回远程主机的远程分支,与本地分支合并
6.1.1 git pull master33 master:branch2
- 取回远程主机master33的远程分支master,与本地分支branch2合并
6.1.2 git pull master33 master
-
取回远程主机master33的远程分支master,再与当前分支合并。等同于
git fetch master33 master
git merge branch2
6.1.3 追踪关系(tracking)
-
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。
比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,
也就是说,本地的branch2分支自动"追踪"master33/master分支。 -
Git也允许手动建立追踪关系。
6.1.3.1 git branch --set-upstream branch2 master33/master
- 上面命令指定branch2分支追踪master33/master分支。
- 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
6.1.3.2 git pull master33
- 本地的当前分支自动与对应的master33主机"追踪分支"(remote-tracking branch)进行合并。
- 如果当前分支只有一个追踪分支,连远程主机名都可以省略。
6.1.3.3 git pull
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。
6.1.3.3.1 git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
-
如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。
-
你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。
git pull -p
等同于下面的命令
$ git fetch --prune master33
$ git fetch -p
七、git push
将本地分支的更新,推送到远程主机 。
7.1 git push <远程主机名> <本地分支名>:<远程分支名>
- 将本地分支推送到远程主机的远程分支上
- 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
7.1.1 git push master44 branch4
- 将本地的master分支推送到origin主机的master分支。
- 如果后者不存在,则会被新建。
- 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
7.1.1.1 git push master44 :branch2
等同于
git push master44 --delete branch2
上面命令表示删除master44主机的master分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
7.2 git push master44
- 上面命令表示,将当前分支推送到master44主机的对应分支。
- 如果当前分支只有一个追踪分支,那么主机名都可以省略。
7.3 git push
- 如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
7.3.1 git push -u master44 branch4
- 将本地的branch4分支推送到master44主机,同时指定master44为默认主机,后面就可以不加任何参数使用git push了。
- 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。
- Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。
7.3.1.1 git config命令
git config --global push.default matching
或者
git config --global push.default simple
7.3.2 git push --all master44
- 不管是否存在对应的远程分支,将所有本地分支都推送到master44主机。
- 如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。
7.3.3 git push --force master44
- 强制本地分支覆盖远程主机上的版本。
- 除非你很确定要这样做,否则应该尽量避免使用–force选项。
- git push不会推送标签(tag),除非使用–tags选项。
7.3.4 git push master44 --tags
- 推送标签(tag)
八 常用命令
8.1 git remte origin set-url URL
- 修改远程分支命令
8.2 git diff master origin/master
- 比较本地分支和远程分支的差异
8.3 git rebase origin/master
- 改写当前分支的历史版本与origin/master保持一致
- 此方法可以维持树形结构但是不会merge操作,会完全覆盖上一版本
##8.4 git merge origin/master - fetch之后,可以合并到当前分支,树形结构不能维持
8.5 git diff
- 可以产看当前有没有add 的内容修改
8.6 git diff --cached
- 查看已经add 没有commit 的改动
8.7 git log test.txt
- 查看某个文件的日志
8.8 git clone xxx.git
- clone 到当前路径
8.9 git clone xxx.git “指定目录”
- clone到指定目录
8.10 git clone -b [new_branch_name] xxx.git
clone时创建新的分支替代默认Origin HEAD(master)
8.11 git add
- 添加文件
8.12 git rm
- 删除文件
8.13 git commit a.txt -m ‘v1’
- 提交文件
8.14 git revert HEAD
- 撤销前一次 commit
8.15 git revert HEAD^
- 撤销前前一次 commit
8.16 git revert 5dfb61e9c5a074ace72998f384915c0b00ae6487
- 撤销指定的版本,撤销也会作为一次提交进行保存。
8.17 git reset –hard fcd23f90c229a63ea457b65ab39d18d8a29824d1
- 彻底回退到某个版本,本地的源码也会变为上一个版本的内容
8.18 git reset --hard fcd23f90c229a63ea457b65ab39d18d8a29824d1
- 远程仓库的目录下对应的文件还是之前的内容,必须得使用git reset --hard才能看到push后的内容
- reset是指将当前head的内容重置,不会留任何痕迹。
8.19 git reset -–soft fcd23f90c229a63ea457b65ab39d18d8a29824d1
- 回退到某个版本,只回退了commit的信息,不会恢复到index file一级。
- 如果还要提交,直接commit即可
8.20 git config receive.denyCurrentBranch ignore
- 解决push时 refusing to update checked out branch: refs/heads/master
8.21 git config core.autocrlf false
- 解决add时 warning: LF will be replaced by CRLF in XXXXXXXXXXXXXX.
8.22 git status
- 查看当前git仓库的状态
8.23 git log --pretty=oneline >> log.txt
- 列出代码的所有改动历史,将他保存到一个文件中
九、设置用户名
9.1 git config --global user.name “wirelessqa”
- 配置全局用户名
9.2 git config --global user.email aaa@qq.com
- 配置全局邮件
9.3 git config --list
- 查看配置列表
十、git日常操作
初始化仓库: Git init
查看隐藏文件: ls -al
查看git配置: git config
仓库级(全局)修改用户名: git config --local(global) user.name ‘CloudBai’
仓库级(全局)修改用户邮箱: git config --local(global) user.email ‘aaa@qq.com’
仓库级(全局)删除用户名: git config --local(global) --unset user.name
仓库级(全局)删除用户邮箱: git config --local(global) --unset user.email
更新所有文件的用户名和邮箱: git commit --amend --reset-author
查看所有配置信息: git config --list
查看用户名配置: git config user.name
查看用户邮箱配置: git config user.email
将文件状态加入git暂存区: git add (git add . 会把当前目录下所以文件加入暂存区)
回到文件未修改状态(丢弃掉新增的相对于暂存区最后一次文件提交的内容): git checkout –
从git暂存区移除文件: git rm --cached || git reset head
将暂存区文件提交: git commit -m ”注释“
查看历史提交记录: git log (参数- 2可以让他只显示前2条记录)
查看历史操作记录: git relog (常用于版本回退后的历史查看。)
删除文件: git rm (删除后要提交更改)
重命名文件: git mv
修正上一次消息提交的注释: git commit --amend -m ‘提交注释’
查看文件的修改历史: git blame
添加别名: git config --global alias.<别名> <命令名> (命令名如何过长的话用’’号括起来,外部命令的话命令名前面加!号。不加的话默认git会在你的别名命令执行前面加上git)
新建标签: git tag -a <标签名> -m <注释>
查看标签: git show <标签名>
删除标签: git tag -d <标签名>
提交标签: git push origin <标签名>
提交全部标签: git push origin --tags
删除远程标签: git push origin --delete tag <标签名>
删除本地标签: git tag -d <标签名>
拉取远程标签: git fetch origin tag <标签名>
查看仓库所有分支: git branch (-av参数可以查看远程分支)
新建分支: git branch <分支名> (新建分支并切换到该分支用git checkout -b <分支名>)
切换分支: git checkout <分支名>
删除分支: git branch -d <分支名> (如果分支未合并的话删除得用-D)
合并分支: git merge <分支名>
分支改名: git branch -m <原分支名> <更改的分支名>
比较暂存区与工作区文件之间的差异: git diff
比较最新的提交与工作区文件之间的差异: git diff HEAD
比较最新的提交与暂存区文件之间的差异: git diff -cached
上一篇: Git的常用操作