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>

 

 

多人协作

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013760174128707b935b0be6fc4fc6ace66c4f15618f8d000

当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

git remote  查看远程库的信息

git remote -v  查看更详细的信息

推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

git push origin master  推送master分支

git push origin dev  推送dev分支

抓取分支,多人协作时,大家都会往masterdev分支上推送各自的修改。

当你的小伙伴从远程库clone时,他得先找到一个存储仓库的位置,然后右键git bash here,然后再clone,成功后,则产生一个project_1仓库,这是举例子。

默认情况下,你的小伙伴只能看到本地的master分支。

git clone git@github.com:lpjia/project_1.git

现在,你的小伙伴要在dev分支上开发,就必须创建远程origindev分支到本地,于是他用这个命令创建本地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分支的链接,根据提示,设置devorigin/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

posted @ 2018-06-03 21:59  前端挖掘机  阅读(145)  评论(0)    收藏  举报