Git命令小总结
常用
- git init git 初始化
- git clone https://github.com/wsxx111/thisStudy.git 从远端拉下来
- git status 查看跟踪状态
- git status -s (喜爱简介版本)
- git add readme.txt 添加到暂存区
- git commit -m '新提交' 从暂存区到提交到库存
- git commit -am'新提交' 直接略add过暂存区,提交到库存 (书上不怎么推荐)
- git commit --amend -m '重新提交' 修复上次提交的 ,相当于 git reset head^ 了一下,又重新提交了
查看
- git remote 查看远端仓库名
- git remote -v 查看远端地址
- git remote show origin 查看本地和远端分支信息
日志
- git log 查看日志
- git log -3 查看前3条日志 (分支下的记录,不是所有的)
- git log -s -2 (简单版)
- git log --graph 左边有分支图
- git log --pretty=oneline 版本号一目了然
- git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录
分支
- git branch 查看本地分支
- git branch -r 查看远程分支
- git branch -a 查看本地和远程分支
- git branch dev 新建未存在的分支dev
- git branch -d test 删除分支test
- git branch -D test 当上面提示:分支有没有合并到当前分支的内容,没法删除时 就需要强制删除了,这个就是强制删除
- git push --delete origin test 删除远端分支test
- git branch -d -r new // 删除远程new分支
- git checkout test 切换到已存在的分支test上
- git checkout -b test 新建并切换test分支上,基于本地创建分支
- git checkout -b dev origin/dev 基于远程分支创建本地分支,注意不能这么写 git checkout -b develop origin develop
- git branch -m | -M oldbranch newbranch // 重命名分支,如果newbranch名字已经存在,需用-M强制重命名
当前分支为dev, git checkout master =git checkout dev master 是dev相对于master发生的改变
git branch -v // 显示分支信息
你在一个分支中工作,但是像获取另一个分支中的某个文件。
git checkout <branch> -- <file>
例如master 有个a.txt文件,现在dev分支上执行 git checkout master -- a.txt
之后,dev分支会多一个a.txt,(是跟踪未add状态)
撤销
- git reset --hard 撤销修改 到未修改的干净状态
- git reset --hard head 与上面一样(对未add命令的和已add未commit的撤销到未add的未修改干净状态)
- git reset --hard 34csdds 撤销到某个版本
- git reset --hard head^ 撤销到未修改的干净状态的上一个提交版本
- git reset --hard head^^ 撤销到未修改的干净状态的上两个提交版本
- git reset --hard head~4 撤销到未修改的干净状态的上四个提交版本
- git checkout -- readme.txt (对未add但修改了,撤销到未修改,对已经add又修改了,撤销到未修改已add状态) 去掉 -- 也是一样的(git checkout readme.txt),但建议带着 避免与切换分支产生分歧就不好了
- git reset (等于 git reset --soft) 或者git reset head 把add暂存区里面的给撤回到未add的工作区中,注意,只是改变状态,没有改变文件里面的内容,而chekout --改变的是内容,不涉及状态
- git reset HEAD readme.txt 撤销某文件,但不能硬撤销某文件,只能软撤销
- git reset --hard 或者git reset --hard head 这个是回复到未修改的工作区,即未add的工作区中,和上面 git reset 还是不一样的,git reset 默认是git reset --soft
合并
- git merge test 把test分支合并到当前分支 (合并前记得切换好分支),可以加 -m 进行解释
- git merge --ff test 和上面一样。 --ff是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-forward模式。当前分支合并到另一分支时,如果没有分歧解决,就会直接移动文件指针。这个过程叫做fast forward。
例如,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个develop的分支,并在其上进行一系列提交,完成时,回到 master分支,此时,master分支在创建develop分支之后并未产生任何新的commit。此时的合并就叫fast forward。master在合并develop分支的时候并没有产生新的节点,如果是--no-ff 会生成一个节点
- git merge --no-ff -m '提交合并' 不fast-forward合并
- git merge --abort 该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态
- git merge dev --squash 当一个合并发生时,从当前分支和对方分支的共同祖先节点之后的对方分支节点,一直到对方分支的顶部节点将会压缩在一起,使用者可以经过审视后进行提交,产生一个新的节点。
在看到冲突以后,你可以选择以下两种方式:
决定不合并。这时,唯一要做的就是重置index到HEAD节点。git merge --abort用于这种情况。
解决冲突。Git会标记冲突的地方,解决完冲突的地方后使用git add加入到index中,然后使用git commit产生合并节点。你可以用以下工具来解决冲突:
使用合并工具。git mergetool将会调用一个可视化的合并工具来处理冲突合并。
查看差异。git diff将会显示三路差异(三路合并中所采用的三路比较算法)。
查看每个分支的差异。git log --merge -p <path>
将会显示HEAD版本和MERGE_HEAD版本的差异。查看合并前的版本。git show :1:文件名显示共同祖先的版本,git show :2:文件名显示当前分支的HEAD版本,git show :3:文件名显示对方分支的MERGE_HEAD版本。
git merge test 如果有冲突,想撤销就
git reset --hard或者 git reset --hard head 就能还原到未合并前
衍合
- git rebase master 衍合,把 从当前分支和master的最近祖先开始到当前分支的 所有提交节点 合到master之后,就是换基
- rebase介绍
区别
- git diff 当前工作区 与 暂存区 比较 显示add之后的变化
- git diff --cached 或者 git diff --staged 是比较的暂存区与库存head的 ,显示的是如果要commit后,提交的新变化
- git diff head 显示的是当前改变 与库存head的变化,包括 add的和add之后的改变 的汇总
关联
- git clone https://github.com/wsxx111/thisStudy.git 从远端拉下来(从远端到本地的一种关联)
- git remote add origin https://github.com/wsxx111/GGG.git 本地建立一个远端的仓库关联 注意地址要对,可以在github先建一个GGG仓库 (从本地到远端的一种关联)
拉取
- git fetch 这将更新git remote 中所有的远程仓库 所包含分支的最新提交id, 将其记录到.git/FETCH_HEAD文件中,不包括文件
- git fetch origin 这将名称为origin 的远程仓库上的所有branch的最新提交id,将其记录。
- git fetch origin dev 这将这将名称为origin的远程仓库上的分支dev
- git pull origin master 拉取远端到本地,并与本地的东西合并
相当于执行了两步
git fetch origin master 拉取远端到本地,不合并
然后 git merge origin master
这两步就是 git pull origin master 的操作 pull即 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。
推送
- git push -u origin dev 把当前的分支与远段的dev分支关联,一般用于首次推送
或者 git push --set-upstream origin dev 这个也可以 之后的推送就可以使用 git push 就行了,同时更新的时候也可以git pull 或者 git fetch 就行了,因为已经关联了。
也可以git branch --set-upstream dev origin/dev 实现本地和远端的分支关联
- git push origin dev 通用的推送,把当前分支推送到远端的dev分支
其他(不想写了)
- git stash
- git stashlist
- git stash apply
- git stash pop
- git rm test.txt
- git merge --no-ff -m "merged bug fix 101" issue-101
- git remote rm origin 删除远程仓库
- git remote add origin git@github.com:wsxx111/GGG.git
- git tag v1.0
- git tag
- git show v0.9
- git tag -d v0.1 删除一个本地标签
- git push origin v1.0 推送一个本地标签
- git push origin --tags 一次性推送全部尚未推送到远程的本地标签
# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd搜索
git clean -nf
git clean -nfd
Git命令小总结的更多相关文章
- git命令小汇总和github
Git 简介 是什么 Git 也是一个版本控制管理软件 有什么用,可以解决什么问题 保存历史记录 多人协作 有了 SVN,为啥要学 Git Git 火 Git 相对于 SVN 来说,更强大,用户也非常 ...
- git 命令小总结
下载代码 git clone http://admin@192.168.0.208:7990/scm/klvchen/tale.git 设置用默认户名和密码登录,注意 URI 前面不允许有 http, ...
- 小技巧--tab键自动补齐Git命令
Git是什么,你不清楚? 好吧,那么该篇内容对你也木有帮助,请绕道而行.. 我们在使用Git命令时,可以通过tab键,自动补齐Git,特别是在切换分支时特别有用. 如下,当我们想将当前分支切换到bug ...
- 我 Git 命令列表 (2)【转】
转自:http://www.microsofttranslator.com/bv.aspx?from=en&to=zh-CHS&a=http%3A%2F%2Fvincenttam.gi ...
- 30分钟Git命令入门到放弃
git 现在的火爆程度非同一般,它被广泛地用在大型开源项目,团队开发,以及独立开发者,甚至学生之中. 初学者非常容易被各种命令,参数吓哭.但实际上刚上手你并不需要了解所有命令的用途.你可以从掌握一些简 ...
- git命令使用方法
git安装包 http://c35.yunpan.360.cn/my/?sid=#%2F%E5%AE%89%E8%A3%85%E5%8C%85%2FGit%E5%AE%89%E8%A3%85%2F g ...
- 常用Git命令清单。
上期传送门:[清单]7个管理和优化网站资源的工具 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository: ...
- 使用git命令创建分支到团队项目
背景 在我们的团队中,我作为管理者,创建了一个叫HelloWorld的项目,大家各自在本地进行开发,将自己的工作贡献到我们的团队项目中.为了便于审核,我希望大家先将自己的贡献先放在属于自己的一个分支上 ...
- Git项目协同开发学习笔记1:项目库开发基础git命令
这年头git基本都是项目开发的标配,之前刚好碰到了就花了两天时间系统学习了下.本文内容基本来自以下tutorial:Learn Git(建议直接去看原文,因为这个网站是有更新的).这个是我看过对git ...
随机推荐
- [D3] Modify DOM Elements with D3 v4
Once you can get hold of DOM elements you’re ready to start changing them. Whether it’s changing col ...
- keil出现一些库函数没有定义
- 【BZOJ 4556】字符串
[链接]h在这里写链接 [题意] 给你一个长度为n(n<=10^5)的字符串以及一个整数m(m<=10^5),代表询问的次数. 每个询问由4个整数a,b,c,d给出 ...
- JAVA 日志库3
Commons Logging和SLF4J都是基于相同的设计,即从一个LogFactory中取得一个命名的Log(Logger)实例,然后使用这个Log(Logger)实例打印debug.in ...
- [AngularFire2] Update multi collections at the same time with FirebaseRef
At some point, you might need to udpate multi collections and those collections should all updated s ...
- 使用JQuery将前端form表单数据转换为JSON字符串传递到后台处理
一般地,我们在处理表单(form表单哦)数据时,传输对象或字符串到后台,Spring MVC或SpringBoot的Controller接收时使用一个对象作为参数就可以被正常接收并封装到对象中.这种方 ...
- Cash Loan----:利用脚本自动化部署系统,解放我们的双手
[前言] 现在我们的项目发布(从git上拉代码部署到Linux上)是通过脚本来完成,生产和测试环境都是运维在控制,开发联调环境由开发来负责,之前开发环境每次部署都是先在本地打好jar包然后传到服务器上 ...
- POJ - 2286 - The Rotation Game (IDA*)
IDA*算法,即迭代加深的A*算法.实际上就是迭代加深+DFS+估价函数 题目传送:The Rotation Game AC代码: #include <map> #include < ...
- ajax实现注册用户名时动态显示用户名是否已经被注册(1、ajax可以实现我们常见的注册用户名动态判断)(2、jquery里面的ajax也是类似我们这样封装了的函数)
ajax实现注册用户名时动态显示用户名是否已经被注册(1.ajax可以实现我们常见的注册用户名动态判断)(2.jquery里面的ajax也是类似我们这样封装了的函数) 一.总结 1.ajax可以实现我 ...
- Seagate-保修验证(za25shrx)
保修验证 http://support.seagate.com/customer/zh-CN/warranty_validation.jsp Seagate 保修验证 End User ...