git 常用功能

git 常用配置 https://blog.csdn.net/I_am_Yong_Ge/article/details/95469621

一、 分支操作

新建分支
                git branch 新分支名
切换分支
                git checkout 新分支名
新建并切换分支
                git checkout -b 新分支名
删除本地分支
                git branch -D 分支名
删除远程分支:
                git push origin --delete 分支名
重命名分支
                git branch -m oldBranchName newBranchName
将重命名过的分支提交
				git push origin newBranchName
查看已有的本地及远程分支
                git branch -a

二、合并多次commit

git rebase -i HEAD~3
或者
指定commitid ( 需要合并的3个的前一次提交的id )
比如:
执行
git rebase -i 63e994851b22a96edfcbe55a58db63f942d57ce0image
image
将除了第一个的pick改成s,
image
然后执行

git mergetool
git rebase --continue

处理冲突,直到合并

三、 忽略掉已经被git管理的文件

git rm --cached  path/file
或者
git rm -r --cached path/file

然后在.gitignore文件里添加上该文件,重新提交即可

四、临时保存文件

git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释

git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行

git stash pop [–index] [stash_id]
git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
eg .
	git stash pop 2
git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的 
通过git stash pop命令恢复进度后,会删除当前进度。

git stash apply [–index] [stash_id]
除了不删除恢复的进度之外,其余和git stash pop 命令一样。

git stash drop [stash_id]
删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。

git stash clear
删除所有存储的进度。

五、配置

遇到文件名提示太长的问题:
git config --system core.longpaths true

解决gitk乱码问题
git config --global gui.encoding utf-8

六、diff

生成diff
进入项目根目录:git diff DEMO > DEMO.diff
则会把DEMO 项目的改动差异导入到DEMO.diff文件中

2个版本差异打包
git diff commit-id-1 commit-id-2 >> diff.txt

打开另一个DEMO项目,把差异文件给同步过来:
git apply --reject DEMO.diff
其中 DEMO.diff是第一步导出的差异文件

七、patch

patch和diff的区别
.diff文件只是记录文件改变的内容,不带有commit记录信息,多个commit可以合并成一个diff文件。
.patch文件带有记录文件改变的内容,也带有commit记录信息,每个commit对应一个patch文件。

生成patch

git format-patch commitId
生成指定commitId之后所有提交的patch

git format-patch commitId-n
生成指定commitId之前的N次提交的patch(n == 1的时候,生成指定commitId的patch)

git format-patch commitId_1..commitId_2 
生成commitId_1后面直到commitId_2之间的patch
如下图

image
使用patch

$ git apply --stat 0001-limit-log-function.patch         
# 查看patch的情况

$ git apply --check 0001-limit-log-function.patch        
# 检查patch是否能够打上,如果没有任何输出,则说明无冲突,可以打上
(注:git apply是另外一种打patch的命令,其与git am的区别是,git apply并不会将commit message等打上去,打完patch后需要重新git add和git commit,而git am会直接将patch的所有信息打上去,而且不用重新git add和git commit,author也是patch的author而不是打patch的人)

$ git am 0001-limit-log-function.patch                               
# 将名字为0001-limit-log-function.patch的patch打上 或者git apply 0001-limit-log-function.patch

$ git am --signoff 0001-limit-log-function.patch                  
# 添加-s或者--signoff,还可以把自己的名字添加为signed off by信息,作用是注明打patch的人是谁,因为有时打patch的人并不是patch的作者

$  git am ./test/*.patch             
# 将项目根目录里面的test文件夹中所有的patch文件 按照先后顺序打上

$ git am --abort                                                                   
# 当git am失败时,用以将已经在am过程中打上的patch废弃掉(比如有三个patch,打到第三个patch时有冲突,那么这条命令会把打上的前两个patch丢弃掉,返回没有打patch的状态)

$ git am --resolved                                                            
 #当git am失败,解决完冲突后,这条命令会接着打patch
 

如果打Patch的过程中发生了冲突(conflicts),怎么办?

解决patch冲突的过程是:
如果不想打这一系列patch了,直接:git am --abort。
如果还想打, 进行如下操作
(1) 根据git apply失败的信息,找到发生冲突的具体patch文件,然后用命令git apply --reject <patch_name>,强行打这个patch,发生冲突的部分会保存为.rej文件(例如发生冲突的文件是a.txt,那么运行完这个命令后,发生conflict的部分会保存为a.txt.rej),未发生冲突的部分会成功打上patch

(2) 根据.rej文件内容提示,修改代码,解决冲突,删除该.rej文件,重复此操作解决所有的冲突

(3) 执行 git add *** 命令,把修改部分添加进入缓存(包括:patch没有冲突,自动合并的内容和自己解决冲突的内容,只是不要加上patch文件)

(4) 最后执行 git am --resolved 解决了这条patch的冲突,接着打patch,如果没有patch了,则打patch结束,会自动把patch中的提交加入历史记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值