GIT快速回忆

详细中文参考:https://git-scm.com/book/zh/v2/

关于GIT和github:请搜索git下载安装,安装了git才能去github或码云(国内)观察自己上传的代码,github有个桌面版只是基于git的的图形工具,还是需要下载git。

概念:

1.提交、版本、commit,ID,差不多都一个意思,动词和名词的区别
2.远程服务器:码云,github等网站
3.工作区:指项目的实际文件所在位置。
4.暂存区(缓存区):add命令之后的记录所在位置。
5.储藏区:stash后的记录所在位置。
6.版本(ID):commit命令后生成。
7.指针:借用c语言的指针概念,指向某个版本(ID)
8.分支:一个指针如果叫做nima,那么称nima为分支
9.主分支:大家默认,叫master的指针作主分支
10.HEAD指针:借用c语言概念,HEAD为指向指针的指针,始终指向分支,被HEAD指向的分支为当前分支,也可理解为HEAD就是当前分支
11.跟踪:git将留意项目中被git设为跟踪的文件发生的变化
12..gitignore文件:对于状态为untracked files的文件,加入到该文件后不再提示未跟踪,即设置为不跟踪文件

提示:想看每个命令的全部选项,请在每个命令后打-h 。一般形式为-x--xxxx

命令:

git init 本地初始化一个仓库
git clone [url] #克隆一个仓库到本地(也可添加主机后再fetch)
git clone -b [branch] [url] #克隆制定分支
git fetch [origin] #拉取远程分支origin/*(不指定分支则拉取所有分支)
git pull [远程主机名] #fetch+merge,细则同上
git add [文件] #纳入git管理

git remote add [主机名] [远程地址] #添加远程服务器,主机名不写则默认为"origin"
git remote show [主机名] #显示远程主机超级详细信息
git remote -v #-v为--verbose(啰唆的)缩写,显示详细信息
git remote rename [主机名] [新主机名] #重命名
git remote rm [主机名] #删除远程服务器

git log --oneline --graph --all # 一行、(树)图形化、全部分支,显示提交记录
git log -n #最近的n个提交记录

git merge [branch] #把branch合并到当前分支,并创建一个最终合并的commit
--abort #中止该次合并
--allow-unrelated-histories #允许不同项目的分支meger(pull也可)到本地
注意:一旦出现合并冲突,将进入“合并冲突状态”,该状态下无法使用任何分支切换命令,直到完成合并或终止合并才退出合并冲突状态。合并冲突状态中,需要修改后再次add冲突文件,并且手动进行一次commit,才能完成合并

git rebase [startPoint] [endPoint] #变基到startPoint,endPoint默认为HEAD可省略
git rebase [startPoint] [endPoint] --onto [branch] #把当前分支线上左开右闭区间内的commit变基到指定分支
-i #启用交互

git push [远程主机名] [本地分支名]:[远程分支名] #推送分支(当前分支存在追踪则只需"git push"即可)
git push -u [远程主机名] [本地分支名]:[远程分支名] #推送分支,同时设为追踪分支
git push [远程主机名] []:[远程分支名] #留空本地分支名,用空分支覆盖远程分支。实际为删除操作

git checkout [file] #从暂存区恢复文件
git checkout [branch] #新建或切换到该分支,工作目录文件回到该分支指向的版本(工作目录变)
git checkout [id] [file]#恢复文件到指定commit的状态
git checkout -b [new local branch] [remote branch] #获取远程分支,将本地新建分支指向获取的远程分支,同时加上远程跟踪

git rm [file] #默认工作区+远程仓库都删除文件
git rm [file] --cached #远程删除,本地不删除

git reset HEAD #重置到当前版本
git reset HEAD~2 #重置到两个版本前(HEAD~ 和 HEAD~1 一样意思)
git reset [$id] #重置到指定ID版本(log显示的那一大串或者log --oneline那小串都可以)
--soft #暂存区不变,工作区不变
--mixed #暂存区清空,工作区不变 默认值
--hard #暂存区清空,工作区回退
注意:无论哪个参数,均能移动当前分支。另外与revert区别在于,reset回去旧版本不被当作一个commit

git revert [$id] # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象
git revert HEAD # 恢复最后一次提交的状态

git commit -m [message] #提交,不带参数-m将启用编辑器以编辑注释
git commit -am [message] #自动把受追踪文件进行暂存+提交

git branch #显示本地所有分支
-a #显示包括远程分支(origin/*)的所有分支
-v #详细显示本地所有分支
-vv #更加详细显示本地所有分支,包括了远程跟踪、落后/领先情况
–d [branch] #删除本地分支,但不能删除当前分支(切去其它分支先),不能删除未合并分支
-D [branch] #强制删除
-u [origin/branch] #设置跟踪的远程分支(-u为--set-upstream-to缩写)
--unset-upstream #取消上面设置的追踪

git difftool [id_1] [id_2] #启用对比工具以对照两次提交,也可以换成文件名对比文件

git stash #把暂存区和未添加到暂存区的被追踪文件储藏起来,清空暂存区和工作区记录(然后就能用checkout切换其他分支了)
git stash list #查看现有的储藏
git stash apply stash@{0} #通过list查看名称(如stash@{0}),不指定储藏则应用最近的储藏
git stash drop stash@{1} #删除指定储藏
git stash push #储藏入栈
git stash pop #储藏出栈


取消跟踪文件的问题

1.被add、commit操作后的文件不属于untracked files,不受.gitignore控制,始终被跟踪,除非他们被git rm命令删除或其他等效的命令
2.常见两种情况:
(1)远程仓库中不需要这个文件,但不想在本地中删除。
删除时加上--cached参数,然后把文件加入.gitignore即可。
(2)远程仓库需要setting.json这个配置文件,但不想暴露其中的个人私密配置信息,想要他只出现在第一次的提交中(没有密码信息),但后续更改不要去追踪变化(有密码信息)。
这个没办法的,将就吧。把setting.json加入到.gitignore,同时复制一份改名为setting.json.example,告知其他人setting.json.example是设置的模板文件,自行更改文件名。关于其讨论,转:git忽略已经被提交的文件


rebase变基操作

基本上必带参数-i,不然容易混乱。
-i参数交互模式,其实就是让你的默认编辑器打开一个临时生成的文件,里面是各种详细信息,通过编辑这个临时文件,就能完成交互,里面大量的#开头的东西,都是注释,主要是让你看下可以怎么改,不用再去百度有什么选项之类的。当你保存并关闭编辑器(vim中wq退出或vscode中关闭编辑窗口等),git进行分析并继续rebase。

当你选择合并若干commit时,git再次启动默认编辑器打开临时文件,让你自由决定如何控制commit提交信息等。

变基冲突时,是逐个commit进行的。如变基3个commit到某个分支,那么冲突等效于这3个commit依次merge到目标分支,也就是可能需要完成3次类似于merge冲突的操作。

类似于merge,你可以在任何时候使用git rebase --abort终止变基恢复原状。
类似于merge,在冲突解决后使用git add [file]暂存该冲突文件。不同在于无需马上提交,而是git rebase --continue以继续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,790评论 1 17
  • 我有一个习惯 睡醒才开手机 一边等待一边祈祷 一觉睡到6点 不幸5点也很开心 今次只有3点 头清脑明身困 静夜高楼...
    第一闲人阅读 152评论 0 2
  • 下午我到家韦宝竟然还没有回来,六点过了我给宝爹打电话,说韦宝肯定被留校了,让他去校门口接一下。宝爹一口回绝了,说留...
    韦宝妈育儿手记阅读 362评论 0 2
  • 我想努力,我会努力。但没有方向,没有指引我该怎么办,心情老是低落,有时候感觉世界很无情,有时候又充满希望,反复循环...
    隐终南阅读 247评论 0 1