首先解决下载缓慢的问题,如果官网下载过慢就使用淘宝的镜像。直接百度搜:taobao git
。https://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
一个完整的代码更新合并步骤。有了上面的经验这个骤打出来了。
二、分支合并技巧
-
如果你就在主分支上:git merge --no-ff branch --no-edit
不加 --no-ff 的合并是直线型的。
你发没发现删除分支你就不知道这个地方曾经干了啥,不知道的话还以为是主分支上直接提交的。
加上--no-ff合并记录就比较清楚了,删除了也没改变历史合并提交记录,另外不加 --no-edit 默认会打开 vim 编辑器,让你输入此次合并的描述信息 message。
合并分支出现fast-forward快速合并模式,的前提条件是你只是修改了另一个分支的文件内容而已。 - 如果在开发分支上:git rebase master
此时主分支落后一步,所以切到主分支后,必须 git rebase branch 分支名,即可。
三、分支移动调整技巧
- 对以前的分支进行调整顺序,删除,合并,更改提交信息
git rebase -i HEAD~4
- 需要吧分支拷贝到任意分支下
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
三个参数:
- 版本号
- 表示自打tag后,有 2 次提交(commit)
- 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 .
看不懂术语版之实战操作撤销
版本回退现在有三个了:
- reset
- revert
- 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
十三、一点补充
今天的生活是一如既往的苦涩,感觉这几天活的很不实在,想做梦似的,摸不到现实,尤其是刚刚在楼下的食堂吃饭,一点感受不到生命生机勃勃的气息。没有一点点激情,尤其是快过年了,没有回家的火车票,搞不好过年都回不了家。
今天早上起来的挺早六点就醒了,七点起来到窗口看了看,又回去睡了,一直到七点半起来八点赶着公交去上班,大约九点二十在团结湖遇到了我们公司的运维,这是我第二次上班在地铁站遇到他了,缘分呀。可惜今天是最后一次见他了,如果不出意外的话,因为他被辞退了,多尴尬,大早上的老大就来找麻烦。公司用的是手机卡插路由器上网,网速实在太慢了,早上来了大家都连不上,不然就卡的要死,结果连老大也受不了了,就和运维讲无线网是你负责的,你的管管,因为老大不是第一次讲了,肯定也没我讲的客气,这一来二去我就知道完了,前两个这么和老大刚的直接当天走人了,今天果然也没意外。这管理风格真是以后当领导的反面教材。
最后一点事了,十月份的工资上家什么时候能给呀。心累。