工作中我常用的 git 命令

工作中我常用的 git 命令

首先解决下载缓慢的问题,如果官网下载过慢就使用淘宝的镜像。直接百度搜:taobao githttps://npm.taobao.org/mirrors/git-for-windows/ 版本更新速度还行。windows 版本分为安装版和便携版。

以下命令排名不分先后用到就查:

一、分支提交合并

分支提交的步骤:zhou(这个拼音太难了,遇到就拼不出来)

0. git pull origin master
1. git add .
2. git commit -m ""
3. git push origin branch
4. git switch master
5. git pull/git pull origin master
6. git merge branch
7. conflicts(表示冲突)① git add . ②git commit -m "" ③git push
8. git switch branch
9. git pull origin master

一个完整的代码更新合并步骤。有了上面的经验这个骤打出来了。

二、分支合并技巧
  1. 如果你就在主分支上:git merge --no-ff branch --no-edit
    不加 --no-ff 的合并是直线型的。



    你发没发现删除分支你就不知道这个地方曾经干了啥,不知道的话还以为是主分支上直接提交的。



    加上--no-ff合并记录就比较清楚了,删除了也没改变历史合并提交记录,另外不加 --no-edit 默认会打开 vim 编辑器,让你输入此次合并的描述信息 message。
    fast-forward

    合并分支出现fast-forward快速合并模式,的前提条件是你只是修改了另一个分支的文件内容而已。
  2. 如果在开发分支上:git rebase master
    此时主分支落后一步,所以切到主分支后,必须 git rebase branch 分支名,即可。
三、分支移动调整技巧
  1. 对以前的分支进行调整顺序,删除,合并,更改提交信息 git rebase -i HEAD~4
  2. 需要吧分支拷贝到任意分支下 git cherry-pick C2 C3 直接把 C2 和 C3 拿到现在分支下。就问你牛逼不。
四、常用命令
git init 初始化一个 git 文件夹,得手动远程连接远程库,就是下面这条命令
git remote add origin git@*.git
git status //①查看提交状态②分支冲突转态
git diff 查看暂存区和工作区的对比不同
git clone 克隆库,自动连接远程库
git pull 把最新的提交抓下来
git log 日志

远程库名和远程链接地址:

$ git remote
origin
$ git remote -v
origin  git@182.92.161.147:wangxin/gep_official.git (fetch)//拉取权限
origin  git@182.92.161.147:wangxin/gep_official.git (push)//提交权限
git log --pretty=oneline //日志,无详细信息
git reset --hard HEAD^ //版本回退一个commit --hard 同时也会修改 working tree
git reset --hard HEAD^^^^ //版本退回四个commit
git reset --hard 1094a //退回到制定commit版本
git push -u origin branch //本地回退,必须强制提交上去

关于 --hard 参数:

git reset 为重置提交,可以将版本回退到某一个commit记录上。后面一般常见的有 --hard 和 --soft 这 2 种参数,默认情况下是 --soft。
两者的不同是:
默认参数 -soft,所有commit的修改都会退回到git暂存区。一般暂存区被commit之后都是空的,所以这个参数和--hard效果在使用时基本没啥区别。
参数--hard,所有commit的修改直接丢弃,小心用。

reset 的不好之处是,你回退只能通过,强制提交上去,一旦多人开发,他们本地的版本依然是比服务器上的版本高的,一旦他们提交,你撤销的版本就会复原,所以使用 revert 直接生成一个版本。
操作步骤如下:

1、git log 找到你误提交之前的版本号
2、git revert -n 版本号// -n, --no-commit       don't automatically commit,不加- n 进入vim编辑格式,编辑-m的信息
3、git commit -m xxxx 提交
4、git push 推送到远程
OK,版本还原了,通知其他人更新一下代码吧

git reflog 查看所有的 commit 命令历史,包括通过 reset 撤销,都会显示。

五、推送分支

推送分支之前一定要记得首先更新,git pull 下:

推送到主分支
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;

创建远程origin的dev分支到本地:
$ git checkout -b dev origin/dev
删除feature1分支:
$ git branch -d feature1

有时候会推送失败,本地 dev 分支与远程 origin/dev 分支没有建立联系:

Branch 'dev' set up to track remote branch 'dev' from 'origin'.
$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

git merge feature1分支冲突内容如何表示:

Git用
<<<<<<<
旧的内容
=======
新的内容
>>>>>>>

标记出不同分支的内容,(fix conflicts and run "git commit")必须手动解决冲突后再提交。
或者根据提示终止 (use "git merge --abort" to abort the merge) 用 git log --graph 命令可以看到分支合并图,输入 q 退出。

六、移动提交记录的哈希值
git cherry-pick C3 C4 C7//把其他分支的commit复制到本分支下
git rebase 分支变直线//报错也没事
git rebase -i HEAD~3打开最近三次的commit历史
git rebase -i [startpoint] [endpoint] 左开右闭

rbase 使用 -i 参数打开 vim 编辑器,我们可以交换位置可以改变 commit 的顺序,此操作需使用 vim 快捷键 ddp 来操作。直接删除记录可以使用 vim 快捷键,dd 删除一行。等等
pick 改为 s 合并两个提交其中 message 也会合并到一起,其他参数如下:

pick:保留该commit(缩写:p)
reword:保留该commit,但我需要修改该commit的注释(缩写:r)
edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
squash:将该commit和前一个commit合并(缩写:s)
fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
exec:执行shell命令(缩写:x)
drop:我要丢弃该commit(缩写:d)
七、分支标签 tag

分支很容易被人为移动,也很容易被改变,我们希望发布新的版本,修正一些重要的 Bug 或是增加了某些新特性。能固定一个版本,让提交树上有一个锚点,标识了某个特定的位置。如果你要是去找 commit 号去发布新版本那可有的找了。

git tag查看标签有几个
git tag <name>就可以打一个新标签:默认标签HESAD是打在最新提交的commit上的
git tag v1.0
对提交的commit id打标签
git tag v0.9 f52c633
git show <tagname>查看标签信息
git show v0.9
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
标签打错了,也可以删除:
git tag -d v0.1
切换到v0.1上
git checkout v0.1
如何切回来
git checkout feature

新入职一家公司或长时间请假,非常需要了解代码近况,该命令查找你提交可访问的最新标记:

git describe --tags master
v0.1.1-1-gb1ae4b3

三个参数:

  1. 版本号
  2. 表示自打tag后,有 2 次提交(commit)
  3. g026498b:g 为git的缩写,后面就是最新的 commit 号。

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin <tagname>一次性推送全部尚未推送到远程的本地标签:

$ git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9
八、撤销操作
# 恢复暂存区的指定文件到工作区
git checkout [file]

# 恢复暂存区的所有文件到工作区
git checkout .

看不懂术语版之实战操作撤销
版本回退现在有三个了:

  1. reset
  2. revert
  3. checkout

因为 checkout 用来做版本回退,所以切换分支最好使用 switch。

九、fetch 和 pull 的不同

查看本地和远程分支:

$ git branch -a

Git中从远程的分支获取最新的版本到本地有这样2个命令:fetch 和 pull

问:有啥不同?

fetch:相当于是从远程获取最新版本到本地,不会自动 merge
git  fetch origin master:temp 从远程的master拉取库到本地的temp分支,不加冒号默认拉取到本地为origin/master的分支上。
\\本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git diff temp
\\比较远程代码与本地代码的区别
git merge temp
\\将temp分支合并到本地master分支
git branch -d temp
\\如果不想保留分支,可以将其删除
git pull <远程主机名>  <远程分支名>:<本地分支名>
\\将远程主机的某个分支,与本地的指定分支合并
git push <远程主机名> <本地分支名>:<远程分支名>
十、提交的艺术:

问:来看一个在开发中经常会遇到的情况:我正在解决某个特别棘手的 Bug,为了便于调试而在代码中添加了一些调试命令并向控制台打印了一些信息。

这些调试和打印语句都在它们各自的提交记录里。最后我终于找到了造成这个 Bug 的根本原因,解决掉以后觉得沾沾自喜!
最后就差把 bugFix 分支里的工作合并回 master 分支了。你可以选择通过 fast-forward 快速合并到 master 分支上,但这样的话 master 分支就会包含我这些调试语句了。

答:
1.git cherry-pick C1 修改提交完事了
2.通过 git rebase -i 两次调整顺序,进行修改最后提交完事。

十一、保存当前工作状态 git stash

当你在工作的时候,累计了比较多的改动,但是突然间需要临时切换到其它分支工作,可是又不好把中途工作的内容提交,那怎么办?这时候git stash就有用了。

# 查看文件变更状态
git status

# 储藏变更,这时候会提示已储藏变更
git stash

# 当在其它分支工作完回到原来分支的时候,可以查看储藏列表
git stash list

# 恢复储藏,这时候文件变更就回来了,listNum为列表序号
git stash apply stash@{listNum}

git flow 和 git 管理规范几篇必看的博客:

十二、一点杂碎

安装 cnpm:

npm install -g cnpm --registry=https://registry.npm.taobao.org

安装完成后Windows 10 使用报错:无法加载文件 C:\Users\yizon\AppData\Roaming\npm\cnpm.ps1,因为window10 的 shell 在此系统上禁止运行脚本,没有权限:

解决:管理员身份运行 powershell,再输入:

set-ExecutionPolicy RemoteSigned
输入A,回车即可

因为 cnpm 安装可能会出现各种奇怪的 bug 建议大家最好使用下面这样的方式,更改 npm 的安装源:

npm install --registry=https://registry.npm.taobao.org

不推荐使用 cnpm ,建议修改 npm 的安装源。

npm安装报缓存的错误,需要清除,报错的可能是 npm 安装卸载不完全:

npm cache clean --force
或者为
npm cache clean -f
十三、一点补充

今天的生活是一如既往的苦涩,感觉这几天活的很不实在,想做梦似的,摸不到现实,尤其是刚刚在楼下的食堂吃饭,一点感受不到生命生机勃勃的气息。没有一点点激情,尤其是快过年了,没有回家的火车票,搞不好过年都回不了家。

今天早上起来的挺早六点就醒了,七点起来到窗口看了看,又回去睡了,一直到七点半起来八点赶着公交去上班,大约九点二十在团结湖遇到了我们公司的运维,这是我第二次上班在地铁站遇到他了,缘分呀。可惜今天是最后一次见他了,如果不出意外的话,因为他被辞退了,多尴尬,大早上的老大就来找麻烦。公司用的是手机卡插路由器上网,网速实在太慢了,早上来了大家都连不上,不然就卡的要死,结果连老大也受不了了,就和运维讲无线网是你负责的,你的管管,因为老大不是第一次讲了,肯定也没我讲的客气,这一来二去我就知道完了,前两个这么和老大刚的直接当天走人了,今天果然也没意外。这管理风格真是以后当领导的反面教材。

最后一点事了,十月份的工资上家什么时候能给呀。心累。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,831评论 0 9
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,416评论 0 7
  • 三大区域: 工作区 → 缓存区 → 本地仓库 一 、 使用 git config 命令进行配置: git ...
    Manchangdx阅读 2,842评论 0 2
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,375评论 0 1
  • 从头天晚上12点一直睡到第二天下午五点多才醒来. 这对我而言绝对是第一次.睁开惺忪的睡眼,努力支起睡得有些疼痛的身...
    皮卡丘阅读 4,929评论 26 174