GIT常用命令
git add test.php 把工作区的文件存放到暂存区(把test.php存放到了工作区)
git status 提交给git本地仓库
git commit -m "提交描述方便理解" 提交描述信息内容
git config --list 查看本地git设置
git checkout <分支名> 用来切换本地项目分支、或是创建分支
git checkout --arphan <分支名> 初次创建分支并且复制master主分支的文件一份
git push origin <分支名> 提交给远程分支(也是创建远程分支),后面会提示登陆git的帐号和密码,输入验证成功就提交给远程创建了
git push origin :<分支名> 加一个冒号代表删除一个分支,本地删除分支也是一样,在命令git checkout :分支名
git branch 可以查看到当前分支和所有分支
git merge 用来多个分支合并
git merge 用来做分支合并,将其他分支中的内容合并到当前分支中。比如分支结构如下:
1 2 3 4 5 6 7 |
master / C0 ---- C1 ---- C2 ---- C4 \ C3 ---- C5 \ issueFix |
把issueFix中的内容Merge进来到主分支master中
例如:git merge issueFix
git pull 从服务器拿取数据
git push提交给远程仓库
git clone <项目地址> 远程克隆指定git项目下载到本地
关联新的远程仓库方法
输入git remote set-url --add origin 项目ssh链接
推送数据到远程仓库git push origin master
重新关联远程仓库
输入git remote rm origin 先会移除之前的信息
输入git remote add origin 项目ssh链接
git merge冲突解决总结
git pull拉回操作中的合并
在前面一个博客,我们将到了非快进式推送的非强制性的另一种解决办法,那就是先拉回在提交,这里的拉回其实包含了两个操作:获取远程仓库的数据,将本地数据进行合并。可以这样写:git pull = git fetch + git merge
git merge命令用于合并分支,它的命令行格式为:git merge [options...] <commit>...大多数情况下的合并我们只需要提供一个commit分支就可以了,默认将指定分支合并到当前分支中。合并后的提交以当前分支的提交作为第一个父提交,以为第二个父提交,合并操作也支持多个与当前工作分支进行合并
默认情况下,合并后的结果会自动提交,我们可以通过设置选项来指定手动提交,通过命令:git merge --no-commit <commit>...模式可以指定合并先将结果放入暂存区,让用户手动对合并结果进行检查、更改,然后手动提交
合并操作并非总会成功,下面将详细介绍
合并一:自动合并
这一类合并不会报错,不需要用户来处理相应的错误,主要分为三种
修改不同的文件
如果两个(或者多个,这里只介绍两个)用户user1/user2各自的本地提交中修改的是不同的文件,那么第二次进行合并推送的提交将能正确合并并提交,不会遇到任何麻烦
修改相同文件的不同区域
首先需要说明的是,文件的修改是分区域的,可以具体到修改哪一行,通过命令cat > fileName.suffix进行逐行修改
当user1用户修改了index.txt文件的第一行第二行并进行提交与上游推送,然后user2用户同样修改了index.txt文件,不过修改的是第三行和第四行,然后在进行git pull命令,同样能正常合并,不会遇到任何麻烦
同时更改文件名和文件内容
如果user1用户将index.txt文件移动到了index2.txt文件并删除index.txt(重命名的操作),并且进行了提交与上游推送,此时user2用户使用命令git pull获取并合并信息之后,会发现它同样也能正常合并,然后我们进行推送:git push origin master然后成功推送,接着我们查看一下远程仓库的内容,会发现git对这种情况的处理方式是:user2用户最终修改的是user1用户对应重命名后的文件
这种情况下的自动合并其实是有逻辑冲突的,就C语言编程我们来举一个例子:我们在main.c文件中调用了一个头文件head.h文件,然后另一个用户将该文件该名成head2.h文件,最终我们使用main.c文件将会编译错误:找不到head.h头文件。所以在这种情况下,我们要慎重合并,或者在本次提交操作上添加一些重要的注释
合并策略概述
git合并操作可以指定使用的合并策略,默认会选择最适合的合并策略。例如:两个分支的合并默认使用recursive合并策略、两个以上分支的合并默认使用octpus合并策略。我们也可以通过传递参数来指定使用的合并策略,命令行模式为:gig merge -s 合并策略 -x 合并策略参数 <commit>...
resolve策略:只能用于两个分支的合并,这个合并策略被认为是最安全、最快的合并策略
recursive策略:只能用于两个分支的合并,两个分支的合并默认使用该策略。该策略可以使用选项:
ours:在遇到冲突的时候,选择当前分支的版本,而忽略远程合并过来的版本。
theirs:和ours选项相反
subtree[=path]:使用子树合并策略
octpus策略:用于合并两个以上分支的策略,该策略拒绝执行需要手动解决的复杂合并。
ours:可以用于任意多个分支的合并策略,合并的结果总是使用当前分支的内容而丢弃远程合并过来的版本内容
subtree:这是一个经过调整后的recursive策略,子树合并策略相关内容可以去百度,这里就不详解了(主要是博主也不会~~)
合并相关的设置
可以通过命令git config来设置与合并相关的配置变量,对合并进行配置。
merge.conflictstyle:该配置变量定义冲突文件中冲突内容的标记风格,有两个可用的风格:默认的merge和diff3
默认的merge风格使用标准的冲突分界符<<<<<<<=======>>>>>>>读冲突内容进行标识,两个文字块分别是本地的修改和他人的修改
diff3风格会在冲突文件中出现三个文字块,<<<<<<< ||||||| ======= >>>>>>>,分别表示本地更改版本、共同的原始版本、他人更改的版本
merge.tool:设置执行命令git mergetool进行冲突解决时调用的图形化工具
merge..path:设置对应的图形化工具的安装位置
在git bush中进入vim编辑器后相关命令
写npm的pakege.json文件的files配置时,如果有不想包含的文件,那就要创建.npmignore文件排除,但windows系统又不允许创建以点开头命名的文件,咋办?
这时候就要用到linux命令行工具创建如git bash。
git bash创建文件和文件夹的命令如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#创建文件 vi #创建文件 touch #拷贝文件 cp #移动文件 mv #创建文件夹 mkdir #另外还有好多命令能够创建文件,之要该命令能够重定向输出到一个不存在的#文件,就会创建文件。例如 tail -f -n 200 /usr/local/tomcat/logs/catalina.out > /tmp/tomcatlog.log |
但是git bush使用vi命令创建文件时进入到vim编辑器后,我不知道怎么退出,查了下发现一个方法:
方法:一直按住esc ,再连续按大写的z两次就退出来了。
但实际上,我发现,只要你按住shift键盘,下面的这些命令都可以用:
只是,用wq的时候,
首先按Esc键退出输入状态,然后按Shift “;” ,出现下面这个界面时才可以输入命令(例如再输入q!或wq!):