生成远程仓库
码云都是中文,所以这里截图没有必要,相信会中文看我的描述也都能 ok,其实很简单,小白不要慌,大神请转身。
- 登陆gitee.comopen in new window
- 右上角头像左边有个 “+” 鼠标放上去点击 "创建仓库"
- 然后必填项就是 "仓库名称" , "路径"
- 如果你的仓库需要让别人合作,或开源,可以选择 "公开"
- 最后点击创建
连接远程仓库并初始提交代码
然后我们会看到一个教程页面,因为此时仓库是空的,没有代码,才有这个页面,这里简单说说 Git 全局设置和创建 git 仓库这两步都是指你在电脑上操作本地仓库的步骤,我们已经做了,忽略就好了
解读
- git remote add ... 这句命令是把远程仓库地址添加到本地仓库中,建立连接
- git push -u origin master 这句命令只是在第一次代码提交用的 初始化语句 之后在提交代码到远程仓库,就可以直接写 git push 就好了,默认提交到的就是 master 地址;
如果你远程仓库里还有多个分支,【master 分支是仓库里的主分支,也是默认分支】,需要提交到其他分支就这样写: git push origin other “other” 就是其他分支的名字,也不需要加 -u了
拉取代码
踩坑
针对小白的踩坑提醒:
- 每一次提交 git push 的时候,确保本地仓库代码已经 git commit -m '先存到本地仓库后才能上传远程仓库'
- 如果是和别人一起开发,每次提交前需要先把代码提交本地仓库,然后拉取远程 git pull,然后看看有没有代码冲突,没有冲突,再 git push 到远程
- git 运行操作流程
- 首先 git add -A 将我们修改的文件,无论新值文件还是删除,还是写了代码,统统放到暂存区,为什么要有暂存区呢,就是为了防止你后悔了,如果你写完发现有错误,不想要了,这时候可以从暂存区撤回之前没改动过的代码。命令是 git checkout 文件名.后缀
- 然后 git commit -m '写一句你日后看到就能会想起这次提交了什么玩意儿的语句,一定要好好写,给自己方便用的' 这时候才是真的把暂存区的代码存如到了本地仓库,当然你要是突然后悔了怎么办?还有命令可以撤回的,这里不说了,可以看我的命令大全
- 如果仓库就自己在维护,那么直接 git push 提交代码就行了,如果是和别人在一起维护仓库,那么别人可能也提交代码了,你就需要先 git pull 把远程仓库最新代码拉下来,git 会帮我们合并代码的,然后再用 git push 提交上去就 OK 了!
#在公司里用 git
-
打开电脑,先 git pull 把远程代码更新一遍到本地,万一有其他同事昨天加班提交的代码呢
-
开始写代码
-
git add -A
-
git commit -m '今天我解决了去年的一个 bug,我感觉超厉害'
-
git pull
- 永远记住,你不是一个人在开发,所以拉代码很重要,不然容易产生代码冲突,可能会导致所有人代码出错。
-
git push
命令大全
#git rebase -i 合并提交|版本归滚open in new window
#git checkout -b devName 创建分支
#git checkout devName 切换分支
#git branch 查看分支
#git branch -v 查看远程仓库地址
#git branch -d devName 删除本地分支
#git branch -r -d origin/branch-name 删除连接的远程本地分支
#git push origin :branch-name 删除远程分支
#git push -d origin branch-name 同时删除本地和远程分支
#git push --set-upstream origin branch-name 强制推送本地分支到线上【第一次】
#git pull 获取服务器最新
#git add -A 添加到暂存区
#git commit -m "日志信息" 提交到本地仓库
#git merge dev1 dev2 合并分支
#解决冲突
- git fetch origin master:tmp
- git diff tmp
- git merge tmp
#参考
时间有限,git 常用的命令其实就那几个,一般情况下再公司里用的都是 git 图像化软件操作,命令不是很常用,但是作为入门还是要经常写写命令。 git 命令大全open in new window来自 GitHub 的网友 git 入门教程
git 怎么删除某一次提交?
这只是回退代码的一种手段,实际上并没有真的删掉,只是删掉了 commitid,实际上还存在库里 原文open in new window觉得很有用的所以写在前面
问题【很实战的问题】:
我在本地的版本库一共提交了 3 次,分别为 A-B-C,如果我发现提交 B 是不必要,想要删除 B。已达到 A-C 这样的过程,具体应该怎么实现呢?
如果在远程版本库中,多人协作的情况下:
有两个工作人员 A,B,分别提交了 2 次,整个分支情况为 A1-B1-A2-B2,如果我要删除 B1,又该怎么实现所有本地和远程版本库都为 A1-A2-B2 呢?
答案【很有价值的答案】
-
像 A-B-C 这种比较简单的历史,要去掉 B 的话可以这样
git reset --hard A git cherry-pick C
-
结果:回退到 A 上然后把 C 再 cherrypick 过来,这样就把 B 给跳过了。
-
如果待处理的提交历史比较长,那用 rebase -i 更方便一些
git rebase -i A
-
这个命令以 A 为新的基准(base),将 A 之后的 commit 列出来让用户选择如何处理。在出现的编辑界面上,把 B 前面的 pick 改成 d 或者 drop,或者把一整行删除掉,保存退出就可以了。
-
-
同样地,处理 A1-B1-A2-B2,要删除 B1 的话
-
git reset --hard A1
-
git cherry-pick A2 B2
-
或者
git rebase -i A1
-
把 B1 从编辑列表里删掉,保存退出。
-
-
最后
第一个例子和第二个例子有个不同的地方:
第一个例子里的 commit 都是本地还没推送的,这种可以随意整,整好了以后再推送,不会影响别人。
第二个例子里,commit 很可能都是已经推送到大家共用的中央仓库的,B1 很可能已经被拉取到了其他人的本地仓库里。
你这边将其删除后,需要用强制推送更新中央仓库里的分支,并且通知其他人这个变动,否则其他人很可能会将新旧版本的分支历史不经意间 merge 到一起再推送回中央仓库,导致 B1 没删掉还多了一个 merge commit,将分支历史变得更加复杂了。 -
后记 如果 push 的时候发生了错误,可以使用 force push 强制推送
#删除库内大体积文件
查看本地仓库文件大小命令:git count-objects -v -H GitHub 和 gitee 在仓库存储上有体积限制,比如超过 1G 就不可以往库里体积代码了。那么我们有时候可能会误操作,将大文件存到了库里。于是我们觉得把大文件删掉再 push 一次不就没有了吗?
no,不是这样的,我们每次体积的代码和文件都会存到.git 文件夹里,被加密存储,即便我们删掉了本次的大文件,但是它再历史版本中还是存在。
那怎么办?有两种办法:
#1. 重新建立仓库,快速省事,把当前文件存进去
这样的好处是快速,简单,坏处是以前的历史记录都没了。。。
还有就是创建临时分支,把当前的文件都提交进去,再把 master 分支删掉,再删掉远程 master,然后本地将临时分支合并到 master,删掉临时分支后再提交到远程,比较麻烦,不如上面那个粗暴简单
#【核心科技】用一个黑科技删除
先摘点这个插件的官话 官网open in new window
像 git-filter-branch 一样删除大型或麻烦的 blob,但速度更快。并用 Scala 编写
#git-filter-branch 的替代品
我们 git 其实有 git-filter-branch 来删除版本中文件的,就是操作起来太繁琐。于是有人写了这个,其实也是扩展的 git-filter-branch 功能,很强大,很好用。
BFG 是一种更简单,更快速的替代方法,可 git-filter-branch 用于从 Git 存储库历史记录中清除不良数据:
- 删除疯狂的大文件
- 删除密码,凭据和其他私人数据
#git 最新版应该是内置了该插件,所以我用下面命令,直接就删掉了大文件

## 删掉连接的远程地址,重新绑定新远程地址
- 首先
git remote -v查看有哪些远程地址
我这里显示
2. 删除 myGiteeBlog 地址:
git remote rm myGiteeBlog
2. 再查看还有没有连接:git remote -v 干净了
2. 连接一个新的地址:git remote add origin git@gitee.com:这里是你的新地址,地址中 origin 可以是你起的任意的名字哦
2. 设置要推送的远端分支:git push --set-upstream origin master
还有一个方法就是查看电脑隐藏文件,找到项目里的.git 文件夹里的 config 文件,记事本打开后修改地址
最快的设置方式:git remote set-url origin git@gitee.com
1. 关于 Vim
它是 Linux 的一款编辑器,由于 git 内置的编辑器也是 vim 所以我不得不总结一下它的使用。
#1.1 Vim 的几种模式
- 正常模式:可以使用快捷键命令,或按:输入命令行。
- 插入模式:可以输入文本,在正常模式下,按 i、a、o 等都可以进入插入模式。
- 可视模式:正常模式下按 v 可以进入可视模式, 在可视模式下,移动光标可以选择文本。按 V 进入可视行模式, 总是整行整行的选中。ctrl+v 进入可视块模式。
- 替换模式:正常模式下,按 R 进入。
#2. 启动 Vim
注意,如果电脑上没有安装 Vim,下面的命令不生效
- vim -c cmd file: 在打开文件前,先执行指定的命令;
- vim -r file: 恢复上次异常退出的文件;
- vim -R file: 以只读的方式打开文件,但可以强制保存;
- vim -M file: 以只读的方式打开文件,不可以强制保存;
- vim -y num file: 将编辑窗口的大小设为 num 行;
- vim + file: 从文件的末尾开始;
- vim +num file: 从第 num 行开始;
- vim +/string file: 打开 file,并将光标停留在第一个找到的 string 上。
- vim –remote file: 用已有的 vim 进程打开指定的文件。 如果你不想启用多个 vim 会话,这个很有用。但要注意, 如果你用 vim,会寻找名叫 VIM 的服务器;如果你已经有一个 gvim 在运行了, 你可以用 gvim –remote file 在已有的 gvim 中打开文件。
#3. 文档操作
这里的命令对 git 内置的 vim 是生效的
-
:e file – 关闭当前编辑的文件,并开启新的文件。 如果对当前文件的修改未保存,vi 会警告。
-
:e! file – 放弃对当前文件的修改,编辑新的文件。
-
:e+file – 开始新的文件,并从文件尾开始编辑。
-
:e+n file – 开始新的文件,并从第 n 行开始编辑。
-
:enew – 编译一个未命名的新文档。(CTRL-W n)
-
:e – 重新加载当前文档。
-
:e! – 重新加载当前文档,并丢弃已做的改动。
-
:e#或 ctrl+^ – 回到刚才编辑的文件,很实用。
-
:f 或 ctrl+g – 显示文档名,是否修改,和光标位置。
-
:f filename – 改变编辑的文件名,这时再保存相当于另存为。
-
gf – 打开以光标所在字符串为文件名的文件。
-
:w – 保存修改。
-
:n1,n2w filename – 选择性保存从某 n1 行到另 n2 行的内容。
-
:wq – 保存并退出。
-
:q! - 不保存退出
-
ZZ – 保存并退出。
-
:x – 保存并退出。
-
:q[uit] ——退出当前窗口。(CTRL-W q 或 CTRL-W CTRL-Q)
-
:saveas newfilename – 另存为
-
:browse e – 会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中,则会打开 netrw 的文件浏览窗口; 如果是 gvim,则会打开一个图形界面的浏览窗口。 实际上- - :browse 后可以跟任何编辑文档的命令,如 sp 等。 用 browse 打开的起始目录可以由 browsedir 来设置:
- :set browsedir=last – 用上次访问过的目录(默认);
- :set browsedir=buffer – 用当前文件所在目录;
- :set browsedir=current – 用当前工作目录;
-
:Sex – 水平分割一个窗口,浏览文件系统;
-
:Vex – 垂直分割一个窗口,浏览文件系统;
#4. 光标的移动
#4.1 基本移动
以下移动都是在 normal 模式下。
- h 或退格: 左移一个字符;
- l 或空格: 右移一个字符;
- j: 下移一行;
- k: 上移一行;
- gj: 移动到一段内的下一行;
- gk: 移动到一段内的上一行;
- +或 Enter: 把光标移至下一行第一个非空白字符。
- -: 把光标移至上一行第一个非空白字符。
- w: 前移一个单词,光标停在下一个单词开头;
- W: 移动下一个单词开头,但忽略一些标点;
- e: 前移一个单词,光标停在下一个单词末尾;
- E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
- b: 后移一个单词,光标停在上一个单词开头;
- B: 移动到上一个单词开头,忽略一些标点;
- ge: 后移一个单词,光标停在上一个单词末尾;
- gE: 同 ge ,不过‘单词’包含单词相邻的标点。
- (: 前移 1 句。
- ): 后移 1 句。
- {: 前移 1 段。
- }: 后移 1 段。
- fc: 把光标移到同一行的下一个 c 字符处
- Fc: 把光标移到同一行的上一个 c 字符处
- tc: 把光标移到同一行的下一个 c 字符前
- Tc: 把光标移到同一行的上一个 c 字符后
- ;: 配合 f & t 使用,重复一次
- ,: 配合 f & t 使用,反向重复一次 上面的操作都可以配合 n 使用,比如在正常模式(下面会讲到)下输入 3h, 则光标向左移动 3 个字符。
- 0: 移动到行首。
- g0: 移到光标所在屏幕行行首。
- ^: 移动到本行第一个非空白字符。
- g^: 同 ^ ,但是移动到当前屏幕行第一个非空字符处。
- : 移动光标所在屏幕行行尾。
- n|: 把光标移到递 n 列上。
- nG: 到文件第 n 行。
- :n
<cr>移动到第 n 行。 - 😒
<cr>移动到最后一行。 - H: 把光标移到屏幕最顶端一行。
- M: 把光标移到屏幕中间一行。
- L: 把光标移到屏幕最底端一行。
- gg: 到文件头部。
- G: 到文件尾部。
#4.2 翻屏
- ctrl+f: 下翻一屏。
- ctrl+b: 上翻一屏。
- ctrl+d: 下翻半屏。
- ctrl+u: 上翻半屏。
- ctrl+e: 向下滚动一行。
- ctrl+y: 向上滚动一行。
- n%: 到文件 n%的位置。
- zz: 将当前行移动到屏幕中央。
- zt: 将当前行移动到屏幕顶端。
- zb: 将当前行移动到屏幕底端。
#4.3 标记
**使用标记可以快速移动。到达标记后,可以用 Ctrl+o 返回原来的位置。 Ctrl+o 和 Ctrl+i 很像浏览器上的 后退 和 前进 **
- m{a-z}: 标记光标所在位置,局部标记,只用于当前文件。
- m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出 Vim, 重新启动,标记仍然有效。
- `{a-z}: 移动到标记位置。
- ‘{a-z}: 移动到标记行的行首。
- `{0-9}:回到上[2-10]次关闭 vim 时最后离开的位置。
- “: 移动到上次编辑的位置。”也可以,不过“精确到列,而”精确到行 。如果想跳转到更老的位置,可以按 C-o,跳转到更新的位置用 C-i。
- `”: 移动到上次离开的地方。
- `.: 移动到最后改动的地方。
- :marks 显示所有标记。
- :delmarks a b – 删除标记 a 和 b。
- :delmarks a-c – 删除标记 a、b 和 c。
- :delmarks a c-f – 删除标记 a、c、d、e、f。
- :delmarks! – 删除当前缓冲区的所有标记。
- :help mark-motions 查看更多关于 mark 的知识。
#5. 插入文本【重要】
#5.1 基本插入
- i: 在光标前插入;一个小技巧:按 8,再按 i,进入插入模式,输入=, 按 esc 进入命令模式,就会出现 8 个=。 这在插入分割线时非常有用,如 30i+
<esc>就插入了 36 个+组成的分割线。 - I: 在当前行第一个非空字符前插入;
- gI: 在当前行第一列插入;
- a: 在光标后插入;
- A: 在当前行最后插入;
- o: 在下面新建一行插入;
- O: 在上面新建一行插入;
- :r filename 在当前位置插入另一个文件的内容。
- :[n]r filename 在第 n 行插入另一个文件的内容。
- :r !date 在光标处插入当前日期与时间。同理,:r !command 可以将其它 shell 命令的输出插入当前文档。
#5.2 改写插入
- c[n]w: 改写光标后 1(n)个词。
- c[n]l: 改写光标后 n 个字母。
- c[n]h: 改写光标前 n 个字母。
- [n]cc: 修改当前[n]行。
- [n]s: 以输入的文本替代光标之后 1(n)个字符,相当于 c[n]l。
- [n]S: 删除指定数目的行,并以所输入文本代替之。 注意,类似 cnw,dnw,ynw 的形式同样可以写为 ncw,ndw,nyw。
#6. 剪切复制和寄存器
#6.1 剪切和复制、粘贴
- [n]x: 剪切光标右边 n 个字符,相当于 d[n]l。
- [n]X: 剪切光标左边 n 个字符,相当于 d[n]h。
- y: 复制在可视模式下选中的文本。
- yy or Y: 复制整行文本。
- y[n]w: 复制一(n)个词。
- y[n]l: 复制光标右边 1(n)个字符。
- y[n]h: 复制光标左边 1(n)个字符。
- yor D: 删除(剪切)当前位置到行尾的内容。
- d[n]w: 删除(剪切)1(n)个单词
- d[n]l: 删除(剪切)光标右边 1(n)个字符。
- d[n]h: 删除(剪切)光标左边 1(n)个字符。
- d0: 删除(剪切)当前位置到行首的内容
- [n] dd: 删除(剪切)1(n)行。
- :m,nd
<cr>剪切 m 行到 n 行的内容。 - d1G 或 dgg: 剪切光标以上的所有行。
- dG: 剪切光标以下的所有行。
- daw 和 das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
- d/f
<cr>:这是一个比较高级的组合命令,它将删除当前位置 到下一个 f 之间的内容。 - p: 在光标之后粘贴。
- P: 在光标之前粘贴。
#6.2 文本对象
- aw:一个词
- as:一句。
- ap:一段。
- ab:一块(包含在圆括号中的)。 y, d, c, v 都可以跟文本对象。
#6.3 寄存器
- a-z:都可以用作寄存器名。”ayy 把当前行的内容放入 a 寄存器。
- A-Z:用大写字母索引寄存器,可以在寄存器中追加内容。 如”Ayy 把当前行的内容追加到 a 寄存器中。
- :reg 显示所有寄存器的内容。
- “”:不加寄存器索引时,默认使用的寄存器。
- “*:当前选择缓冲区,”*yy 把当前行的内容放入当前选择缓冲区。
- “+:系统剪贴板。”+yy 把当前行的内容放入系统剪贴板。
配置 git 自动提交代码
- 创建一个以.sh 结尾的文件,里边写上以下代码:
-
在 package.json 文件里的 scripts 下添加一行代码如下
"push": "bash deploy.sh" -
完了。