获得版本库
git init
-
git clone
查看信息
git help
-
Git log
查看提交日志
-
git diff
比较文件在不同状态中的文件区别
版本管理
-
Git add
加入到版本暂存区中
. 表示当前文件夹都纳入到暂存区
-
git commit
将暂存区的文件提交到git版本库中
-
git rm
git rm 版本库中的文件
远程协作
-
git pull
将远程版本库中的文件拉取到本地
-
git push
将本地版本库中的文件推送到远程库
Git配置
git 查看版本
- git —version
首次使用前的配置
对于user.name与user.email来说,有3个地方可以设置
1,/etc/gitconfig (几乎不用) 对于操作系统的 git config —system
2,~/.gitconfig (很常用) 对于所有的git项目 git config —global
-
3,针对于特定的项目的 .git/config文件中 对于特定的项目 git config —local
git config --local user.name 'lihao' git config --local user.email 'test@qq.com' git config user.name git config user.email //重置 git config --local user.name 'lisan' //删除 git config --local --unset user.name
git的提交更新
提交更新,每次准备提交前,先用 git status 看下,是不是都已暂存起来了,然后在运行提交命令。
- Git commit
- git commit -m 'init'
- Git commit —amend -m 'init' 修改最后一次提交的message
- git commit -am 'init' 添加到索引库并提交 不用写add了
git 删除文件
- 删除文件
- Git rm readme
以上两者区别
Git rm :
- 删除了一个文件
- 将被删除的文件纳入到暂存区(stage,index)
- git rm --cached -r .idea 从暂存区删除
如果恢复文件
git reset HEAD index.php 由暂存区恢复到工作区
git checkout — index.php 丢弃工作区删除文件的内容
rm:
将文件删除了,这时,被删除的文件并未纳入缓存区当中.
如果恢复文件:
git checkout — index.php
git 重命名
git mv from_file to_file
Git 查看提交历史
- git log
- -p 展开显示每次提交的内容差异
- -n 仅显示最近的n次更新
- —stat 仅显示简要的增改行数统计
- —pretty=oneline
- —pretty=format:'%h - %an,%ar:%s'
- —graph 图形化的方式查看log
忽略文件 .gitignore
- 新建 .gitignore 文件
- *.a 忽略所有 .a结尾的文件
- !lib.a 但 lib.a除外
- /todo 仅仅忽略项目根目录下的todo文件不包括subdir/todo
- Build/ 忽略build/目录下的所有文件
- doc/*.txt 会忽略doc/notes.txt 但不包括 doc/server/arch.txt
- ** 表示所有的目录
如果.gitignore尝试以下方法
.gitignore只能忽略哪些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,
则修改.gitignore是无效的,那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
分支
列出当前所有分支
- git branch
创建分支
- git branch branch_name
切换分支
- git checkout branch_name
删除分支
- git branch -d branch_name
创建并转向所创建的分支
- git checkout -b branch_name
修改分支的名称
- git branch -m branch_name new_branch_name
fast-forward
- 如果可能,合并分支时git 会使用fast-forward 模式
- 在这种模式下,删除分支时会丢掉分支信息。
- 合并时加上 —no-ff 参数会禁用fast-forword, 这样会多出一条commit id
- git merge —no-ff dev
合并分支
- Git merge branch_name
git 回退版本
-
回退到上一个版本
git reset -- hard HEAD^ //回退到上一个版本 git reset -- hard HEAD^^ //回退到上两个版本 git reset -- hard HEAD~2 //回退到指定第几个版本 git reset -- hard commit_id //回退到指定的版本
-
查看操作日志
git reflog
checkout
-
Git checkout — test.txt
作用是:丢弃掉相对于暂存区中最后一次添加的文件内容所做的变更
-
Git reset HEAD test.txt
作用是:将之前添加到暂存区(stage,index)的内容从暂存区移除到工作区。
保存工作现场
保存现场
- git stash
- git stash sava 'init'
- git stash list
- git stash —help
恢复现场
- Git stash apply (stash 内容并不删除,需要通过git stash drop stash@{0} 手动删除)
- git stash pop (恢复的同时也将stash 内容删除)
- Git stash apply stash@{0}
git 标签
新建标签,标签有两种:轻量级标签(lightweight)与带有附注标签(annotated)
-
创建一个轻量级标签
git tag v1.0.1
-
创建一个带有附注的标签
git tag -a v1.0.2 -m 'release verion'
-
删除标签
git tag -d tag_name
-
搜索标签
git tag -l 'v*'
-
查看标签
git show v1.0.0
-
将标签推送到远程
git push origin v1.0.0 //推送指定的标签 git push origin --tags // 推送所有的标签
-
删除远程标签
git push origin --delete tag v1.0.1
查看一个文件都是谁提交的
git blame index.php
git diff 比较
- git diff : 比较的是暂存区与工作区文件之间的差别,暂存区表示是原始文件。
- git diff HEAD: 比较的是最新的提交与工作区之间的差别。
- git diff —cached: 比较的是版本库与暂存区之间的差别。
远程
查看远程仓库
Git remote show 显示远程仓库的别名。
-
Git remote show origin 远程仓库详细信息
git remote show origin * remote origin Fetch URL: https://github.com/haojuwang/git.git Push URL: https://github.com/haojuwang/git.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)
添加到远程仓库
- Git remote add origin 远程地址
- git push -u origin master
查看远程仓库
git branch -a 查看远程分支
git branch -av 查看远程分支并显示最后一次提交的信息
-
git remote show origin 查看远程分支与本地的对比
clone
- git clone git@github.com:haojuwang/git.git git2 下载到指定的git2 文件夹
创建远程分支
git push —set-upstream origin 远程名称
-
git push —set-upstream origin src:dest (src 本地 dest 远程)
删除远程分支
git push origin :dev(远程分支名称)
-
git push origin --delete dev
修改远程分支名称
git remote rename origin origin2
远程分支删除了本地同步删除
git remote prune origin
推送到远程
- Push 完整命令: git push origin srcBranch:destBranch (srcBranch 本地 destBranch远程)
- pull操作的完整命令是: git pull origin srcBranch:destBranch (srcBranch 远程 destBranch本地)
- HEAD 标记: HEAD 文件是一个指向你当前所在分支的引用标识符,该文件内部并不包含SHA-1值,而是一个指向另外一个引用的指针。
- 当执行git commit 命令时,Git会创建一个commit对象,并且将这个commit对象的parent指针设置为head所指向的引用的SHA-1值。
- 我们对于HEAD修改的任何操作,都会被git reflog 完整记录下来
- 实际上,我们可以通过git底层命令symbolic-ref来实现对HEAD文件内容的修改
基于远程分支创建分支
- git checkout -b develop origin/develop
- git checkout --track origin/test
git别名
git config --global alias.br branch br 表示 branch 的简写
-
~/.gitconfig 别名文件
cat ~/.gitconfig [alias] br = branch co = commit
查看远程分支提交log
git log origin/master
git log remotes/origin/master
git log refs/remotes/origin/master
git裸库
- Git裸库是指没有工作区的git 项目,常用于服务器端
- 创建一个裸库 gi init —bare
git submodule
git submodule add git@10.211.55.3:java/git_child.git submodule
子仓库的地址:git@10.211.55.3:java/git_child.git
submodule 子仓库放置的目录
更新submodule
- 直接进入submodule 的目录 执行git pull
- 更新所有的submodule git submodule foreach git pull
submodule git clone 发生了变化
git clone git@10.211.55.3:java/git_parent.git git_parent2
git submodule init
git submodule update --recursive
--------------
git clone git@10.211.55.3:java/git_parent.git git_parent2 --recursive
删除submodule
git rm --cached mymodule
rm rf mymodule
git add .
git commit -am 'update'
rm .gitmodules
git push
git subtree
添加 subtree
git remote add subtree-origin git@10.211.55.3:java/git_subtree_child.git
git subtree add --prefix=subtree subtree-origin master --squash
git push
subtree: 表示目录
subtree-origin: 远程版本库
master: 表示远程版本库的分支
parent subtree pull
git subtree pull --prefix=subtree subtree-origin master --squash
parent Subtee push
git push
git subtree push --prefix=subtree subtree-origin master
git cherry-pick
将一个分支的修改应用到另外一个分支上
现在是在dev 分支上修改,我想把修改放在master上
master: git cherry-pick c7d3592
c7d3592 commit sha-1 这个id 是dev上面的
原来的分支修改删除
dev: git checkout c7d3592 //切换到 c7d3592分支
c7d3592 : git branch -D dev 删除分支
c7d3592 : git branch -b dev 创建分支
Git rebase
- Rebase : 变基,意即改变分支的根基
- 从某种程度上来说,rebase与merge可以完成类似的工作,不过二者的工作方式有着明显的差异
生成公钥私钥
-
ssh-keygen
ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/lixueqin/.ssh/id_rsa):
id_rsa 私钥 不能给别人
id_rsa.pub 公钥
gretty
http://akhikhl.github.io/gretty-doc/Gretty-configuration.html
repositories {
maven {
name 'aliyun'
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenCentral()
}
//gretty
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:2.0.0'
}
}
if (!project.plugins.findPlugin(org.akhikhl.gretty.GrettyPlugin))
project.apply(plugin: org.akhikhl.gretty.GrettyPlugin)
gretty{
httpEnabled = true
servletContainer = 'tomcat8'
contextPath = '/mygit'
httpPort = 8081
host = "localhost"
scanInterval = 1
fastReload =true
inplaceMode = 'soft'
loggingLevel = "DEBUG"
consoleLogEnabled = true
debugPort = 6005
debugSuspend = true
}
运行
gradle appRun
debug
gradle appRunDebug
远程debug
https://dancon.gitbooks.io/intellij-idea/content/remote-debugging.html
gitlab安装
-
配置 vim /etc/gitlab/gitlab.rb
external_url 'http://Vultr' external_url 'http://108.61.126.40/
-
载入配置服务(初始化和修改/etc/gitlab/gitlab.rb 后需要重新载入)
gitlab-ctl reconfigure
-
启动服务
gitlab-ctl start
-
停止服务
gitlab-ctl stop
-
重启服务
gitlab-ctl restart
查看日志
gitlab日志:/var/log/gitlab
查看gitlab日志:gitlab-ctl tail
查看gitlab对应的Nginx访问日志:gitlab-ctl tail nginx/gitlab_access.log
查看gitlab对应的数据库postgre-sql的日志:gitlab-ctl tail postgresql
gitlab数据存放目录:/var/opt/gitlab/git-data
-
下载失败
https://packages.gitlab.com/gitlab/gitlab-ce rpm -i gitlab-ce-9.4.6-ce.0.el7.x86_64.rpm
不让用户注册
http://10.211.55.3/admin/application_settings
git 仓库
git init --bare 仓库名称.git
///data/git/cangku.git/