git常用命令

20 篇文章 0 订阅
5 篇文章 0 订阅
git 版本信息
$ git version


1,了解系统环境变量
/etc/gitconfig
gitconfig
查看配置
git config --list
git config user.name
git config user.email
查看离线配置帮助文档
git help config




2.设置身份
$git config --global user.name "douzi"
$git config --global user.email xx@example.com




3.初始git
1)直接初始化
git init
2)克隆
使用git方式克隆
git clone git://github.com/git/hello-world.git
使用https的方式克隆
git clone https://github.com/git/hello-world
克隆时使创建一个HelloWorld的目录(默认为hello-world)
git clone https://github.com/git/hello-world HelloWorld
修改远程仓库在本地仓库的名字为douzi(默认为origin)
git clone -o douzi https://github.com/git/hello-world HelloWorld




4.创建文件
$ echo "liqi" >> douzi.txt




5.文件状态
git status




6.文件比较
git diff readme.txt




7.添加文件
git add readme.txt




8.提交文件
git commit -m "init"
git commit readme.txt -m "init"
git commit . -m "init"
git commit *.txt -m "init"


注:-m "init"为添加注释,如果不加,则会报错:Aborting commit due to empty commit message.












9.查看修改日志
git log




10.标签
命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签。




11.修改标签
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。


12.查看忽略文件
cat .gitignore


文件 .gitignore 的格式规范如下:


1)所有空行或者以 # 开头的行都会被 Git 忽略。


2)可以使用标准的 glob 模式匹配。


3)匹配模式可以以(/)开头防止递归。


4)匹配模式可以以(/)结尾指定目录。


5)要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。


6)所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(*) 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。


13.移除文件
git rm filename.txt 
git rm --cached -f filename.txt 移除暂存区但不删除文件(文件必须是在暂存区)


14.文件改名
$ git mv file_from file_to


15.取消暂存 b.txt 文件
 git reset HEAD b.txt


16.查看远程仓库
查看远程服务器的简写$ git remote
查看远程服务器的简写与URL $ git remote -v


17.从远程仓库中抓取与拉取
$ git fetch [remote-name]


18.推送到远程仓库
$ git push origin master
origin为git clone时默认远程仓库名字,master为默认分支名字


19.查看远程仓库
git remote show [remote-name]
$ git remote show origin


20.远程仓库的移除与重命名
$ git remote rename origin douzi


21.标签
1)查询标签
$ git tag
$ git tag -l 'v1.8.5*'
$ git show v1.4-lw


2)创建标签
$ git tag v1.4-lw
$ git tag -a v1.4 -m 'my version 1.4'


3)后期打标签
查看历史日志
$ git log --pretty=oneline
结果
5267a1dd56590fcadd6100450cc92f5f8d9e00ba sdf
7eaeaab8d0fd7bec456697c03d019170c7b042af qq
113eee1fdeb5cf9afb9ceb4864107fc21016784a 3
60afdcfb841f1989730f9e4f3f127b2d2c19861a s
a1f00921d978a48a42ec60ce9a0db7ff62506eb0 demo
ba7ee609e1abaa57c59b037e708c8a9abdd8bf04 init
想对demo打标签
$ git tag -a v1.2 a1f00921d978a48a42ec60ce9a0db7ff62506eb0


4)共享标签
git push origin [tagname]
$ git push origin v1.2
注:默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上


5)检出标签
git checkout -b [branchname] [tagname]
注:在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支
$ git checkout -b version2 v2.0.0


22.分支
1)创建分支
$ git branch testing
$ git branch sc/ruby_client master
2)查看各个分支当前所指的对象
$ git log --oneline --decorate
$ git log --oneline --decorate --graph --all
3)切换分支
$ git checkout testing
注:切换分支会改变工作目录中的文件
4)创建并切换分支
$ git checkout -b testing
$ git checkout -b sc/testing master
5)合并分支
$ git merge testing
6) 删除分支
$ git branch -d testing
7)查看分支
$ git branch
$ git branch -v
8)查看哪些分支已经合并到当前分支
$ git branch --merged
9)跟踪分支
$ git checkout --track origin/master
10)将本地分支与远程分支设置为不同名字
$ git checkout -b mt origin/master
11)拉取分支
$ git fetch
$ git fetch --all
12)拉取并合并分支
$ git pull
注:其实它是执行的两个命令git fetch,git merge
13)删除远程分支
$ git push origin --delete testing
14)提交分支到远程服务器
$ git push origin testing


23.变基
原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master)的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用
$ git checkout experiment
$ git rebase master
现在回到 master 分支,进行一次快进合并。


注:总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。


24.私有小型团队(类SVN例子)
1)A用户上传了文件,B用户再上传本地数据到远程仓库的例子
以下例子基于A已经提交文件到远程服务器上了
$ git fetch origin 先要拉取数据(必须先拉取数据)
$ git merge origin/master 然后合并数据到本地仓库(必须合并数据到本地仓库才可以看到拉取到本地的远程更新数据)
$ git add . 添加数据到临时区
$ git commit -m "提交数据到本地仓库"
$ git push origin master 最后上传数据到远程仓库


2)A用户上传了文件,B用户又在本地新建了一个分支,当需要把分支代码提交到主干分支上时的例子
以下例子基于A已经提交文件到远程服务器上了,并且B用户新建了一个分支issue54
$ git fetch origin 在分支issue54拉取远程主分支数据
$ git log --no-merges issue54..origin/master 想要知道必须合并什么进入她的工作才能推送
$ git checkout master 切换到本地主分支上
$ git merge issue54 合并issue54到本地主分支上
$ git merge origin/master 合并远程分支到本地主分支上
$ git push origin master 如果合并都没有问题,就可以把本地主分支的代码提交到远程主分支上


3)删除文件并提交到远程仓库
$ git rm test1
$ git commit -m "delete test1"
$ git push orgin master


25.私有管理团队
--


26.大项目合并工作流
Git 项目包含四个长期分支:master、next,用于新工作的 pu(proposed updates)和用于维护性向后移植工作(maintenance backports)的 maint 分支。 贡献者的新工作会以类似之前所介绍的方式收入特性分支中


27.查看当前版本号
$ git describe master


28.构建
$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz 构建发布包
$ ls *.tar.gz 查看发布包
$ git archive master --prefix='project/' --format=zip > `git describe master`.zip 解压发布包


29.制作提交简报
$ git shortlog --no-merges master --not v1.0.1


30.日志
$ git log 查看提交日志(会列出哈希值)
$ git show 哈希值 (显示当前哈希值的具体提交信息)
$ git log --abbrev-commit --pretty=oneline 简短的查看提交日志
$ git reflog 分析你所有分支的头指针的日志来查找出你在重写历史上可能丢失的提交(只存在于本地)
$ git show HEAD@{5} 效果和$ git show 哈希值 是一样的
$ git show master@{yesterday} 查看昨天的提交日志
$ git show HEAD@{2.months.ago} 查看2个月前的提交日志
$ git log --pretty=format:'%h %s' --graph 祖先引用是另一种指明一个提交的方式
$ git show HEAD^ 查看上一个提交,也就是 “HEAD 的父提交”
$ git show master..test1 在 master 分支中而不在 test1分支中的提交,反过来写也可以git show test1..master
$ git log origin/master..HEAD 查看你即将推送到远端的内容
$ git log master...experiment 选择出被两个引用中的一个包含但又不被两者同时包含的提交
$ git log --left-right master...experiment 显示每个提交到底处于哪一侧的分支


31.交互式暂存
$ git add -i


32.储藏与清理
有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态,而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。
$ git stash 储藏
$ git stash apply 恢复储藏
$ git stash list 查看储藏列表
$ git clean -f -d 移除没有忽略的未跟踪文件
$ git clean -n -d 查看clean命令将会做什么


33.搜索
$ git grep -n context 输出 Git 所找到的匹配行行号
$ git grep --count context 包括哪些文件包含匹配以及每个文件包含了多少个匹配
$ git grep -p countext *.java 匹配在java文件中带countext的文件
$ git log -S test --oneline 找到test是什么时候引入的


34.高级合并
$ git merge --abort 如果两个分支合并后有冲突,可以使用这个命令使其恢复到之前的状态
$ git merge -Xignore-space-change whitespace 合并忽略空白


35.子模块
添加子模块
$ git submodule add https://github.com/chaconinc/DbConnector
克隆主模块后子模块是空的,必须在子模块中直行下面两个命令
$ git submodule init
$ git submodule update
如果想克隆主模块的时候一起把子模块也克隆了
$ git clone --recursive https://github.com/chaconinc/MainProject
如果想在主模块中更新子模块
$ git submodule update --remote DbConnector


36.打包(没有网络但又想把修改共享别人的时候)
$ git bundle create repo.bundle HEAD master 打包,不包含子模块
$ git clone repo.bundle repo 解压包到repo下


37.创建一个新的提交历史版本
$ git log --oneline
ef989d8 fifth commit
c6e1e95 fourth commit
9c68fdc third commit
$ git branch history c6e1e95
$ git log --oneline --decorate
$ git remote add project-history https://github.com/schacon/project-history
$ git push project-history history:maste
$ git log --oneline --decorate


38.打包(压缩git空间)
$ git gc


39.数据恢复
例子:
1)查看提交日志
$ git log --pretty=oneline
ab1afef80fac8e34258ff41fc1b867c702daa24b modified repo a bit
484a59275031909e19aadb7c92262719cfcdf19a added repo.rb
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit
2)我们将 master 分支硬重置到第三次提交:
$ git reset --hard 1a410efbd13591db07496601ebc7a059dd55cfe9
HEAD is now at 1a410ef third commit
$ git log --pretty=oneline
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit
3)git reflog 命令来了解你曾经做过什么
$ git reflog
1a410ef HEAD@{0}: reset: moving to 1a410ef
ab1afef HEAD@{1}: commit: modified repo.rb a bit
484a592 HEAD@{2}: commit: added repo.rb
4)以标准日志的格式输出引用日志
$ git log -g
commit 1a410efbd13591db07496601ebc7a059dd55cfe9
Reflog: HEAD@{0} (Scott Chacon <schacon@gmail.com>)
Reflog message: updating HEAD
Author: Scott Chacon <schacon@gmail.com>
Date:   Fri May 22 18:22:37 2009 -0700


third commit


commit ab1afef80fac8e34258ff41fc1b867c702daa24b
Reflog: HEAD@{1} (Scott Chacon <schacon@gmail.com>)
Reflog message: updating HEAD
Author: Scott Chacon <schacon@gmail.com>
Date:   Fri May 22 18:15:24 2009 -0700


       modified repo.rb a bit


5)数据恢复(你可以创建一个名为 recover-branch 的分支指向这个提交(ab1afef))
$ git branch recover-branch ab1afef
$ git log --pretty=oneline recover-branch
ab1afef80fac8e34258ff41fc1b867c702daa24b modified repo a bit
484a59275031909e19aadb7c92262719cfcdf19a added repo.rb
1a410efbd13591db07496601ebc7a059dd55cfe9 third commit
cac0cab538b970a37ea1e769cbbde608743bc96d second commit
fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit


$ git merge recover-branch


40.初始化一个本地仓库(就是clone命令封装的几个命令)
$ git inti 初始化本地仓库
$ git remote add origin https://github.com/xx/login 添加一个远程仓库
$ git fetch origin master 拉取远程仓库索引到本地仓库
$ git checkout master 将远程仓库的最新提交检出到本地的工作目录


备注:教程
git教程 http://www.git-scm.com/book/zh/v2
代码托管站点GitHub、BitBucket、Google Code、repo.or.cz
Windows下Eclipse搭建GitHub开发环境图文教程 http://www.linuxidc.com/Linux/2013-06/85372.htm
从GitHub将Maven项目导入Eclipse4.2 http://www.linuxidc.com/Linux/2013-04/83082.htm
分享实用的GitHub 使用教程  http://www.linuxidc.com/Linux/2014-04/100556.htm








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值