技术标签: 面试 学习 github Git git 服务端 gitlab
目录
https://github.com/liyinchigithub/Git-commandshttps://github.com/liyinchigithub/Git-commands
新项目执行Git初始化,并进行第一次提交
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/liyinchigithub/Git-commands.git
git push origin master
对github、gitlab远程仓库,已有项目进行克隆
git clone https://github.com/liyinchigithub/Git-commands.git
(1)将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull origin
git pull https://github.com/liyinchigithub/Git-commands.git
远程分支是与当前分支合并
git pull origin master
(2)拉取代码,但不合并到本地
git fetch --all
git fetch --tags
git reset --hard origin/master
(3)git pull 与git fetch区别:
git fetch能够直接更改远端跟踪分支。
git pull无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。
git fetch会将数据拉取到本地仓库,它并不会自动合并或修改当前的工作。
git pull是从远程获取最新版本并merge到本地,会自动合并或修改当前的工作。
使用git fetch更新代码,本地的库中master的commitID不变,还是等于1。
使用git pull更新代码,本地的库中master的commitID发生改变,变成了2。
(1)添加指定目录到暂存区,包括子目录:
git add [dir]
例如:添加2个文件到暂存区
git add README hello.js
(2)添加当前目录下的所有文件到暂存区:
git add .
将暂存区内容添加到本地仓库中
git commit -m "提交内容备注"
在执行git add . 之后执行git commit
(1)回滚代码,撤销某一次commit,并强推到远程仓库
如果需要删除的 commit 是最新的,那么可以通过 git reset
命令将代码回滚到之前某次提交的状态,但一定要将现有的代码做好备份,否则回滚之后这些变动都会消失。具体操作如下:
git log // 查询要回滚的 commit_id
git reset --hard commit_id // HEAD 就会指向此次的提交记录
git push origin HEAD --force // 强制推送到远端
(2)回退所有内容到上一个版本
git reset HEAD^
(3)回退 hello.js 文件的版本到上一个版本
git reset HEAD^ hello.js
执行 git reset HEAD 命令用于取消已缓存的内容。
执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存 。
(4)回退到指定版本
查看提交日志,回退到指定commit_id
git log
git reset --hard commit_id
或者
git reset 052e
(5)回退上上上一个版本
git reset --soft HEAD~3
备注:此次提交之后的修改会被退回到暂存区
(6)回退到某个版本回退点之前的所有信息。
git reset –hard bae128
备注:此次提交之后的修改不做任何保留,git status
查看工作区是没有记录的。
(7)将本地的状态回退到和远程的一样
git reset --hard origin/master
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
(8)HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推...
(9)误删恢复
如果回滚代码之后发现复制错了 commit_id,或者误删了某次 commit 记录,也可以通过下方代码恢复:
git relog // 复制要恢复操作的前面的 hash 值
git reset --hard hash // 将 hash 换成要恢复的历史记录的 hash 值
注意:删除中间某次提交时最好不要用 git reset
回退远程库,因为之后其他人提交代码时用 git pull
也会把自己的本地仓库回退到之前的版本,容易出现差错进而增加不必要的工作量。
(1)新建分支
git branch 新建的分支名
(2)查看所有分支信息
git branch
(3) 删除分支
git branch master
git branch -d 分支名称
删除分支前,需要切换到其他分支
①删除本地分支
git branch
git checkout master
git branch -d 本地分支名
②删除远程分支
git push origin --delete 远程分支名称
如何本地分支已提交到远程仓库,想删除这个分支,除了删除本地分支,还需要远程分支也要删除,以上两个命令都要执行一次。
查看当前分支状态
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
new file: hello.php
切换分支
(1)将本地的 master 分支推送到 origin 主机的 master 分支。
git push origin master
(2)本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:
git push --force origin master
(3)指定分支
git push <远程主机名> <本地分支名>:<远程分支名>
完整操作
git branch
git checkout 分支名
修改代码
git add .
git commit -m "提交内容注释"
git push origin master
远程项目仓库对提交上来的分支代码还有做merge操作,才可以把分支代码合并到master中
(1)开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
(2)当master代码改动了,需要更新开发分支(dev)上的代码
git checkout master
git pull
git checkout dev
git merge master
git push -u origin dev
当两个分支不在一条线上,需要执行 merge 操作时使用该命令。
(1)撤销提交
如果中间的某次 commit 需要删除,可以通过 git rebase
命令实现,方法如下:
git log // 查找要删除的前一次提交的 commit_id
git rebase -i commit_id // 将 commit_id 替换成复制的值
进入 Vim 编辑模式,将要删除的 commit 前面的 `pick` 改成 `drop`
保存并退出 Vim
(2)解决冲突
该命令执行时极有可能出现 reabase 冲突,可以通过以下方法解决:
git diff // 查看冲突内容
// 手动解决冲突(冲突位置已在文件中标明)
git add <file> 或 git add -A // 添加
git rebase --continue // 继续 rebase
// 若还在 rebase 状态,则重复 2、3、4,直至 rebase 完成出现 applying 字样
git push
git revert
:放弃某次提交。git revert
之前的提交仍会保留在 git log 中,而此次撤销会做为一次新的提交。git revert -m
:用于对 merge 节点的操作,-m 指定具体某个提交点。(1)撤销提交
要撤销中间某次提交时,使用 git revert
也是一个很好的选择:
git log // 查找需要撤销的 commit_id
git revert commit_id // 撤销这次提交
(2)撤销 merge 节点提交
如果这次提交是 merge 节点的话,则需要加上 -m
指令:
git revert commit_id -m 1 // 第一个提交点
// 手动解决冲突
git add -A
git commit -m ""
git revert commit_id -m 2 // 第二个提交点
// 重复 2,3,4
git push
(1)查看提交历史
(2)用 --oneline 选项来查看历史记录的简洁的版本
git log --oneline
(3)可以用 --graph 选项,查看历史中什么时候出现了分支、合并。
(4)可以用 --reverse 参数来逆向显示所有日志。
git log --reverse --oneline
(5)如果只想查找指定用户的提交日志
git log --author
例如,比方说我们要找 Git 源码中 liyinchi 提交的部分
git log --author=Linus --oneline -5
(6)如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。
git log --oneline --before={3.weeks.ago} --after={2020-04-23} --no-merges
(7)git blame
git blame <file>
远程仓库操作
git remote show [remote]
git remote show https://github.com/liyinchigithub/Git-commands
(1)添加远程版本库
一般在新建项目时使用
git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/liyinchigithub/Git-commands.git
git push -u origin master
(2)删除远程仓库
git remote rm name
(3)修改仓库名
git remote rename old_name new_name
(1)显示当前的 git 配置信息
git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
(2)编辑当前的 git 配置信息
git config -e
如果需要删除的 commit 是一个或多个文件,可以进行以下操作。
(1)被提交到仓库的某个文件需要删除,可以使用 git rm
命令:
git rm <file> // 从工作区和暂存区删除某个文件
git commit -m "" // 再次提交到仓库
(2)如果只想从暂存区删除文件,本地工作区不做出改变,可以:
git rm --cached <file>
(3)如果在工作区不小心删错了某个文件,可以用 git checkout
将暂存区的文件覆盖工作区的文件,从而把误删的文件恢复:
git checkout -- <file>
(4)用 git rm
删除文件,同时还会将这个删除操作记录下来;
用 rm
删除文件,删除的仅仅是本地物理文件,没有将其从 git 的记录中剔除。
(5)git add
和 git rm
区别,
git add
仅能记录添加、改动的动作,删除的动作需靠 git rm
来完成。
(1)打标签
到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签
git tag -a v1.0 -m "release 1.0 version"
git push origin :v1.0
或者,每次
git push origin tag v1.x
(2)查看本地标签
git tag
(3)查看远程 tag
git ls-remote --tags origin
(4)将本地tag推送到远程
git push origin v1.0
也可以仅执行该句,会自动生成本地tag并推送到远程
(5)完整打标签并推送到远程仓库
git add .
git commit -m "first commit"
git push origin master
git push origin v1.0
或者
git add .
git commit -m "first commit"
git push origin master
git tag -a v1.1 -m "release 1.0 version"
git tag
git push origin :v1.1
(6)删除本地标签
git tag
git tag -d 标签名
(7)删除远程标签
git push origin :refs/tags/v1.0
(8)追加标签
如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签。
$ git tag -a v0.9 85fc7e7
$ git log --oneline --decorate --graph
* d5e9fc2 (HEAD -> master) Merge branch 'change_site'
|\
| * 7774248 (change_site) changed the runoob.php
* | c68142b 修改代码
|/
* c1501a2 removed test.txt、add runoob.php
* 3e92c19 add test.txt
* 3b58100 (tag: v0.9) 第一次版本提交
1.执行git push origin 提示”git hint: Please, commit your changes before merging“
解决办法:
简洁显示日志记录
git log --pretty=oneline
git reset --hard 提交id
2.执行git pull 提示”error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.“
解决办法:
git reset --soft HEAD^
如果要要撤销第六次 commit 就要把 HEAD 指向 第五次 所以 reset 一下 HEAD 就好
注意:工作空间的代码的改动就没了
如果想保留工作空间的代码只是撤销commit,请执行下面的命令:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
文章浏览阅读1.2k次。如果你的系统需要大量的磁盘容量,但是身边却没有外接存储设备,仅有个人计算机时,那该怎么办?此时,通过网络的SCSI磁盘(iSCSI)就能够提供帮助。这个iscsi是将来自网络的数据仿真成本机的SCSI设备,因此可以进行诸如LVM等方面的操作,而不是单纯使用服务器端提供的文件系统而已,相当有帮助。作为服务器的系统,通常是需要存储设备的,而存储设备出来可以使用系统内置的磁盘之外,如果内置的磁盘容量不够大,而且也没有额外的磁盘插槽可用时,那么常见的解决方案就是增加NAS:Network Attached St_nas iscsi
文章浏览阅读5.8k次,点赞34次,收藏29次。CSDN始终致力于促进城市区域内尖端新兴技术开发者交流,提供开放自由的切磋平台。在这个充满挑战和机遇的一年即将结束之际,通过本次聚会,汇聚杭州本地各行各业的开发者朋友,回顾过去一年城市社区的成就和收获,感谢携手同行的各位,更近期待新鲜血液的加入,共同展望明年新发展。_cmeet沙龙
文章浏览阅读439次。在牛客网刷面经,不会的总结一下,当作备份Ajax和Flash各自优缺点:Ajax的优势:1.可搜索性 2.开放性 3.费用 4.易用性 5.易于开发。Flash的优势:1.多媒体处理 2.兼容性 3.矢量图形 4.客户端资源调度Ajax的劣势:1.它可能破坏浏览器的后退功能 2.使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中 ,不过这些都有相关方法解决。Flash的劣势:1.二进制..._前端有个左减右加的
文章浏览阅读1k次。写了一些方法让相同数据的行进行上下合并,可能不是最优解,仅提供一个解决思路,渣代码,望谅解最终效果:思路就是,传入数据源,表头,需要合并的项,然后计算这一行向下有多少个相同的数据就合并多少个单元格,并且被合并的单元格需要obj.attrs.rowSpan = 0因为需要合并的项是不确定的,我创建了一个对象obj[dataIndex]去记录一些需要用到的变量引入这个组件:传入的参数有三个 columns表头 dataSource数据源 customRenderList 需要合并的项,其中前两项和a_a-table如何设置纵向表头
文章浏览阅读175次。1. 关于IOC中的注入问题在上图中,我们在注入控制层的属性时,在使用xml文件注入时,bean标签有一个autowire属性,默认值是default,还有个两个值:byType和byName。byType:设置为此值时,spring容器会查找bean容器中有没有要注入的属性的类型的bean,找到唯一一个bean就将该bean注入给该属性,没找到或者找到多个bean,就会报错;byName:当我们设置为此值时,下面的property就可以省略不写,但是此时,spring容器会将要注入的属性作为bea
文章浏览阅读1.6w次。/// <summary> /// 获取相机的屏幕截图 /// </summary> /// <param name="camera"></param> /// <param name="width"></param> /// <param name="height"></param> /// <...
文章浏览阅读455次。前言-我的疑问我刚工作的时候,对资深老工程师羡慕佩服,一直期望自己能成为他们这样的人。我现在还没到35岁,但总听到媒体渲染35岁中年危机,似乎我钦佩的是一帮可怜虫。最近几年面试和共事的3..._高级工程师值不值钱
文章浏览阅读1.7k次。官方node demo以下是自己手动改的 记录以下万一以后用到 async objects(msg){ // tiken client 获取 await setMsg(this.app) const token = await getInternalToken(); msg.oauth_token = token; msg.oauth_client = getClient(); // 读oss文件写到本地文件 let file = await t_cad 在线预览
文章浏览阅读93次。新人们常常会说我看了多少多少的书,看过某某人写的书,仿佛书看了就会做了。其实不然,很多新人在面试的时候夸夸其谈,说啥啥都知道一点,到真正做的时候,啥都不会。归根到底是没有经验,技术这玩意儿经验非常重要,很多东西如果不是你碰到了,你从书上一辈子都找不到答案。 我看书的习惯一般都是先把整个书翻翻,了解一下书的基本内容,然后在实际项目中遇到相应的问题再去翻书,当然这是..._matlab对进it行业有什么帮助
文章浏览阅读1.2k次。java_memcached-release_2.6.6.jar链接:https://pan.baidu.com/s/12kVG_8KvA5zybMsbQXkDlA提取码:zaji_java_memcached-release:pom:2.6.6
文章浏览阅读574次。按照网上正常流程在单页面引用插件treeselect,本地运行正常,上线报错解决方案:不要单页面引用 放在main.js里引入import Treeselect from '@riophae/vue-treeselect'import '@riophae/vue-treeselect/dist/vue-treeselect.css'Vue.component('TreeSelect', Treeselect)vue.config.js文件里转化语法module.exports _menu.vue:56 warning: `value` should not be array when `treeselect` is single
文章浏览阅读1w次。在VS2017中新建一个C++项目:文件->新建->项目->Visual C++->Windows桌面->Windows控制台应用程序->名称和位置->确定。"stdafx.h"头文件全称“StandardApplication Framework Extensions”,指的是标准程序框架的扩展。以下摘自百度百科:预编译头文件通过编译stdafx.cpp生成,以工程名命名_visual studio 第一次helloworld