世界上知识那么多,又岂是人力所能穷尽,于是术业有专攻。对于git,有用的命令片段其实非常少,而命令却是非常多。于是,掌握git常见的用法就足够了。不要在语句级别上记忆git命令,在代码片段级别上记忆git命令更好,因为git命令往往是几个命令总是出现在一种片段里面。

零、初始化仓库

Git global setup:

git config --global user.name "再见理想"
git config --global user.email "iexmyth@gmail.cn"

Create Repository

mkdir webapp-mall
cd webapp-mall
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@gitlab.beyond.com:app/webapp-mall.git
git push -u origin master

Existing Git Repo?

cd existing_git_repo
git remote add origin git@gitlab.beyond.com:app/webapp-mall.git
git push -u origin master

一、gitignore生效

改动过.gitignore文件之后,在repo的根目录下运行:

git rm -r --cached .

git add .

之后可以进行提交:

git commit -m "fixed untracked files"

在windows新建gitignore时,写成.gitignore.就会创建.gitignore文件

二、未提交本地更改就pull报错

error: Your local changes to the following files would be overwritten by merge:
why.txt
Please commit your changes or stash them before you can merge.
Aborting

解决方法一:错误提示没有提交本地更改,那么提交本地更改就可以pull了。

解决方法二:使用stash命令

git stash  把修改保存到暂存区
git pull 拉取远程分支
git stash pop 弹出修改

两种方法最终效果一样,只是解决方法一会多一条提交记录。

三、已经push到了远程,想要把远程仓库恢复到push之前的状态

不小心把一些秘密文件push到了github上,必须撤销commit。有人赶紧在本地把秘密文件注释一些之后重新commit,这样只能掩人耳目,实际上很容易被干翻。试想攻击者clone了你的仓库,可以直接回退到原始的有秘密文件的版本。所以必须撤销push到远程的这些commit

需要注意的是,这样做是有风险的,远程仓库会彻底删除一些提交导致无法回退到那些提交。

git log --oneline 找到想要退回到的commidId
git reset <commitId> --hard 彻底回退到某次提交前的状态,相当于删除之后的提交,但仓库内容并不会删除
git push origin head --force 推送到远程分支

四、远程有三个分支,删除一条分支

三条分支分别为A和B和C,删除A分支之后把B分支改名为master设置为默认分支

1、本地分支的创建和删除

git branch dev 创建分支
git checkout dev 切换分支
一系列操作之后commit
git checkout master 切换到主分支
git merge dev
手动修改一些文件
git add *
git commit -m "edit something"
git push origin head
git branch -d dev 删除分支

git branch -b dev 创建并切换分支

2、删除远程分支

git branch -av 查看全部分支,-a表示all,-v表示verbose
git push origin --delete <branchName> 删除远程分支,这是新版命令,旧版命令是git push origin :<branchName>

3、重命名远程分支

git中没有直接进行重命名远程分支的命令,只能通过:重命名本地分支、推送本地分支、删除远程分支三步走才行。

git push命令后面本来是要加具体分支名的,如果不加,那就是用默认分支,所以git中有默认分支的概念。

注意,无法删除默认分支,在github上可以手动设置默认分支。

git branch -m <旧分支名称> <新分支名称>   重命名本地分支
git push origin <远程分支名称> 推送到远程分支,如果不存在,则创建此分支。其中,推送的内容默认是与之同名的本地分支。所以必须保证同名的本地分支存在。
git push origin -d <旧的远程分支名> 删除远程分支

五、本地提交了很多次,push时只想push一次

首先看一下我的提交

$git log --oneline

1029842 edit why.txt
a2f2489 ok
9367492 update why.txt add '天为'
948c103 add why.txt
5f802ee add baga.txt
de7fd6f add haha.txt

然后执行rebase命令

git rebase -i de7f 命令不用写全,写够前4位即可

这时会弹出vim来,可以用pick squash drop等命令来处理每次提交。

pick表示保留提交,squash表示把某次提交压缩到上一次的提交,drop表示放弃某次提交。

其中第一行表示最早的一次提交,那次提交是不可以squash的,要想squash就必须有上一次提交。

最后,git push --force 强制更新远程仓库。

六、git pull和git fetch的区别

git pull=git fetch+git merge

git fetch命令只进行拉取远程分支,没有进行合并

七、push.default 默认的远程分支

push.default可用的值如下:

1.nothing

不推送任何东西并有错误提示,除非明确指定分支引用规格。强制使用分支引用规格来避免可能潜在的错误。

2.current

推送当前分支到接收端名字相同的分支。

3.upstream

推送当前分支到上游@{upstream}。这个模式只适用于推送到与拉取数据相同的仓库,比如中央工作仓库流程模式。

4.simple

在中央仓库工作流程模式下,拒绝推送到上游与本地分支名字不同的分支。也就是只有本地分支名和上游分

支名字一致才可以推送, 就算是推送到不是拉取数据的远程仓库,只要名字相同也是可以的。在GIT 2.0中,simple将会是push.default的默认值。simple只会推送本地当前分支。

5.matching

推送本地仓库和远程仓库所有名字相同的分支。这是git当前版本的缺省值。

一般来说我们使用simple就可以进行正常的使用,如果严格一点儿可以用nothing。配置push.default的命令如下:

git config --global push.default simple

有用的git片段的更多相关文章

  1. 你不一定知道的几个很有用的 Git 命令

    这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...

  2. java,有用的代码片段

    在我们写程序的过程中,往往会经常遇到一些常见的功能.而这些功能或效果往往也是相似的,解决方案也相似.下面是我在写代码的过程中总结的一些有用的代码片段. 1.在多线程环境中操作同一个Collection ...

  3. 收集有用的 Javascript 片段

    内容目录 数组 arrayMax arrayMin chunk compact countOccurrences deepFlatten difference distinctValuesOfArra ...

  4. 有用的git建议

    这篇文章的目的是给经常使用git管理项目提供一个有益的提醒.如果你是git新手,可以先阅读文后的引用部分,然后在回头阅读此篇文章.在介绍git命令之前,你可以先看看来自 on-my-zsh 提供的别名 ...

  5. 60个有用CSS代码片段

    1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...

  6. 有用的css片段

    1.背景渐变动画 CSS中最具诱惑的一个功能是能添加动画效果,除了渐变,你可以给背景色.透明度.元素大小添加动画.目前,你不能为渐变添加动画,但下面的代码可能有帮助.它通过改变背景位置,让它看起来有动 ...

  7. Java-20个非常有用的程序片段

    下面是20个非常有用的Java程序片段,希望能对你有用. 1.字符串有整型的相互转换 String a = String.valueOf(2); //integer to numeric string ...

  8. 不常用但很有用的git show 和 git blame

    团队使用git 合作时,可能遇见想要查看一段比较难以阅读代码, 此时可能需要联系最新的修改者是哪位,这时候最有用的最快捷的方法就是git blame 啦, 这个指令的output是一个文件的各个区域段 ...

  9. Css学习总结(2)——60个有用CSS代码片段

    1.垂直对齐 如果你用CSS,则你会有困惑:我该怎么垂直对齐容器中的元素?现在,利用CSS3的Transform,可以很优雅的解决这个困惑: .verticalcenter{ position: re ...

随机推荐

  1. RecyclerView源码分析(一)--整体设计

    RecyclerView这个控件出来已经有一段时间了,如果看这篇文章的你,还没有使用过这个控件.那请先去学习怎样使用.不然看也白看.这里奉上一些关于介绍RecyclerView使用方法的优秀博客: 鸿 ...

  2. 深度学习材料:从感知机到深度网络A Deep Learning Tutorial: From Perceptrons to Deep Networks

    In recent years, there’s been a resurgence in the field of Artificial Intelligence. It’s spread beyo ...

  3. Git 学习(四)操作修改和版本穿梭

    Git 学习(四)操作修改和版本穿梭 之前的章节,已介绍了本地Git库创建.暂存区增.删.改,以及提交版本库:可回顾下命令操作: git add 和 git commit. 光有之前章节的操作,Git ...

  4. 使用socket编程实现一个简单的文件服务器

    使用socket编程实现一个简单的文件服务器.客户端程序实现put功能(将一个文件从本地传到文件服务器)和get功能(从文件服务器取一远程文件存为本地文件).客户端和文件服务器不在同一台机器上. pu ...

  5. 多个程序对sql server中的表进行查询和插入操作导致死锁

    最近在做一个项目,是要用多个程序对sql server中的相同的数据库进行操作(查询和插入),所以在开始的时候常会出现死锁问题,后来在网上进行了咨询,发现了一些解决方法,留作大家参考: 并发去操纵一张 ...

  6. [leetcode]Populating Next Right Pointers in Each Node II @ Python

    原题地址:https://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意: Follow up ...

  7. IOS开发之地图导航

    一.问题描述 现在很多的APP 都开始引入了地图和定位功能,包括一些餐饮业,团购等.他们都过定位和地图来让用户更加方便的根据自己的位置找到合适的目标,也就是说,现在地图定位已经不再是导航工具类,地图工 ...

  8. Ubuntu 16.04 LTS安装好之后需要做的15件事

    看到这篇文章说明你已经从老版本升级到 Ubuntu 16.04 或进行了全新安装,在安装好 Ubuntu 16.04 LTS 之后建议大家先做如下 15 件事.无论你是刚加入 Ubuntu 行列的新用 ...

  9. 微信小程序价值思考:手机端的CS-BS迁移

    从很多特点来看,小程序都非常类似于网页:主要的业务逻辑在服务端.客户端无需安装应用程序.小程序的开发采用的HTML+JS+CSS技术等等.张小龙自己对小程序的定位也大概如此:无意做小程序分发平台,只是 ...

  10. 内有干货!2个人3个月怎样从零完毕一款社区App《林卡》

    嘿,大家好.我是不灭的小灯灯,我赌5毛你没听说过我的名字... 好啦.这篇不是鸡汤,是经验吐槽.干货分享! 所以乱七八糟的就不多说了.直接切入正题. 先说下自己的情况背景,眼下尚未毕业.非计算机专业, ...