Git相关
温馨提示:使用浏览器的查找功能,可以很快找到想要的内容区域。
git常用命令
https://www.cnblogs.com/sysu-blackbear/p/3463475.html
git 一些比较常用的命令
https://blog.csdn.net/weixin_37292229/article/details/71080573
Git查看、删除、重命名远程分支和tag
https://blog.zengrong.net/post/1746.html
使用Windows的童鞋要特别注意:
千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,
他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,
明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!
记得把Notepad++的默认编码设置为UTF-8 without BOM即可。
把文件添加到版本库
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。
不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的,前面我们举的例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文件。
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
git介绍


绿色的,前面为我的git账户(就是QQ邮箱地址),后面的是我这个计算机名。
紫色的,不管。
黄色的,是我操作的git仓库的目录。
蓝色的,是正在操作的分支branch。
查看git客户端版本,git版本
git --version
操作git文件/目录,注意
操作不了无.git文件的那个目录,只能操作有.git文件的那个目录,
如果想操作它的子目录,则要在当前目录继续操作,加上子目录的路径,如folder/a.txt,后续的操作都要加子目录路径
创建文件夹
mkdir 文件夹名
先cd好目录,然后直接创建文件夹
只能用来创建文件夹,不能创建文件
创建git仓库

创建成功,则会在相应的目录下出现.git文件夹。
查看当前目录
pwd
查看本目录下文件
ls

深蓝色的表示文件夹
白色的表示文件
查看某个文件的内容
cat <file>
进入git项目
先打开git bash客户端,再cd项目目录
快速在某一目录打开git bash
先打开本地文件夹,右键git bash here
cd d:\git_repository/project 简写 cd /d/git_repositiry/project 就进入这个目录了
注意查看当前所操作目录,
向上一级跳,cd ..
向下一级跳,cd gitskills
初始化Git仓库
加上了.git隐藏文件,就创建了git仓库
git init
添加文件到仓库

命令操作
git add <file>
git commit -m "操作注释"
查看状态和查看修改内容

git status 查看不了空文件夹的状态,
也查看不了cd无.git文件的目录的状态,只能cd有.git文件的目录的状态
git diff
版本切换

git log 详细提交的日志
/*
*这里有一个问题,打印详细log,如果日志太多,会出现END,然后接着命令行有问题,不能正常输入命令
*按Q,即可以继续正常输入命令
*/
git log --pretty=oneline 简化提交的日志
git reflog 查看命令历史
git reset --hard commit_id 切换到指定版本
用HEAD表示当前版本,也就是最新的提交的版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
上个版本,-1
git reset --hard HEAD^
上上个版本,-2
git reset --hard HEAD^^
上上上个,-3
git reset --hard HEAD^^^
历史的某个版本,-10
git reset --hard HEAD~10
撤销修改
git checkout -- <file>

场景1,没有添加到暂存区,git checkout -- <file>,就是用版本库的版本,替换现有工作区的版本,修改和误删都行。
场景2,添加到了暂存区,还没有commit,git reset HEAD <file>,先把暂存区的放弃,git checkout -- <file>,重复场景1。
场景3,commit了,还没推送到远程库,git log --pretty=oneline,查看版本日志,git reset --hard commit_id 切换到指定版本。
删除文件
1.直接在文件夹里删除,不过就是多一步而已,还得执行2,最好是用2删除,删除的文件名也能方便查看。
2.用命令 git rm test.txt
这会直接把操作文件,放到暂存区,用git status查看,显示绿色。
git commit -m "操作注释" 把暂存区的提交到版本库里
删除文件夹及其子文件
git rm -r <folder>
-r表示递归所有子目录,如果你要删除的,是空的文件夹,此处可以不用带上-r。
撤销删除
1.如果直接是在文件夹里删除,还没有git rm <file>,那么git checkout -- <file>就可以了。
文件夹递归删除撤销。如果直接是在文件夹里删除,还没有git rm -r <folder>,那么git checkout -- <folder>/就可以了。
2.如果直接在git中,git rm <file>,那么先git reset HEAD <file>,然后git checkout -- <file>就可以了。
文件夹递归删除撤销。如果直接在git中,git rm -r <folder>,先git reset HEAD <folder>/,再git checkout -- <folder>/就可以了
和GitHub关联,从本地库→远程库

git push
push到远程库,remote是远程的意思,origin是远程库的名字

从远程库→本地库
git clone 地址
打开git bash软件,cd进入到一个目录里面,直接克隆github仓库即可
查看分支列表,创建分支,切换分支,合并分支,删除分支,冲突产生,解决冲突

git merge <name> 这是快速合并模式,
这种模式下,如果删除分支,会丢失分支信息,再查看就看不到分支合并图上的分支信息,如下图的红色圈。
下图的紫色圈是禁用Fast-forward模式,保留有分支信息的,无论分支是否已删除。
git merge --no-ff -m "操作注释" dev dev→master,把dev分支合并到master上

查看分支合并图
git log --graph 查看详细情况,包括谁什么时间操作的
git log --graph --pretty=oneline 查看简单情况,commit_id是详细的
git log --graph --pretty=oneline --abbrev-commit 查看简单情况,commit_id也是简写的



修改bug,储藏工作区
手头还没完成的功能或者工作内容,暂时不能commit,要想临时修改master的bug等,得先把工作区的内容add到暂存区,才能使用储藏命令,否则不能使用。
git stash
藏起来之后,想在master分支上修改bug,就先切换到master分支上,
git checkout master
然后从master创建临时分支,
git checkout -b linshi
在linshi分支上修改bug,
git add -A
git commit -m "xxxx"
添加,提交,切换到master,把linshi合并到master上,删除临时分支linshi
git checkout master
git merge --no-ff -m "xxxx" linshi
git branch -d linshi
此时,bug修复完,需要重新回到自己的手头工作上
git stash list 查看储藏列表
git stash pop 恢复的同时把stash内容也删了,用list就查不到了,
可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用
git stash apply stash@{x} 恢复的时候,不会同时删除stash内容,需要下一步来删除,git stash apply也是命令
git stash drop 删除stash内容
完成这些后,其实手头工作还是已经放到暂存区里了,接下来要么commit,git commit -m "xxxx"
要么把工作放回工作区,git reset HEAD <file>,接着继续开发自己的代码。

开发新功能
最好新建个分支,
git checkout -b <name>
该分支没有被合并,想删除这个分支,
git branch -D <name>

多人协作
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
git remote 查看远程库的信息
git remote -v 查看更详细的信息
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
git push origin master 推送master分支
git push origin dev 推送dev分支

抓取分支,多人协作时,大家都会往master和dev分支上推送各自的修改。
当你的小伙伴从远程库clone时,他得先找到一个存储仓库的位置,然后右键git bash here,然后再clone,成功后,则产生一个project_1仓库,这是举例子。
默认情况下,你的小伙伴只能看到本地的master分支。
git clone git@github.com:lpjia/project_1.git

现在,你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支,
git checkout -b dev origin/dev git checkout -b <branch-name> origin/<branch-name> 在本地创建和远程分支对应的分支,

现在,他就可以在dev上继续修改,然后,时不时地把dev分支push到远程,
git add <file> 或者 git add -A
git commit -m "xxxx"
git push origin dev
你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送,
重复上面的

推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,
Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送,
git pull

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接,
git branch --set-upstream-to=origin/dev dev git branch --set-upstream-to=origin/<branch-name> <branch-name>

再pull,git pull

这回git pull成功,

但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push,就可以了。
手动解决冲突,
如果这时候改了冲突的部分,git区分符号区域也删了,看不到冲突的起始模样,想再次git pull却失败,

只能中止合并冲突,
git merge --abort

就可以再次git pull来拉远程库的文件,然后解决冲突,add,commit,push
!!!


标签tag
标签说白了对应commit_id,对人来说,好记!
注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
创建标签,打标签
在需要打标签的分支上,git branch,查找分支,git checkout <branch>,切换到分支,
git tag <tag_name>,这是针对最新的commit_id打标签。
给某一个commit_id打标签
git tag <tag_name> <commit_id>
查看标签列表
git tag
查看标签信息
git show <tag_name>
创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a <tag_name> -m "说明文字" <commit_id>

删除标签
git tag -d <tag_name>
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
推送标签到远程
git push origin <tag_name>
一次性推送标签,一次性推送全部尚未推送到远程的本地标签
git push origin --tags
删除远程标签
git tag -d <tag_name>,先删本地
git push origin :refs/tags/<tag_name>,再删远程


以上内容是来自https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
自己看完之后又总结的,方便自己使用。
下图是某位达人总结的图,转自http://blog.sina.com.cn/s/blog_a2e292f00102xhk1.html


浙公网安备 33010602011771号