转自:https://www.cnblogs.com/qdhxhz/p/9763546.html
一、命令
1、checkout 切换分支
git checkout 分支名#切换分支#如果在当前分支上对文件进行修改之后,没有commit就切换到另外一个分支b,这个时候会报错,因为没有commit的文件在切换分支之后会不覆盖。所以Git 报错提示。git checkout -f 分支名#强制切换到分支#如果在当前分支上对文件进行修改之后强制切换另一个分支,那么当前分支修改东西直接丢弃,所以-f 参数一定一定要非常非常小心使用,一般情况下不建议使用,除非真的要强制去执行git checkout -# 切换到上一个分支git checkout .# 撤销工作区中当前目录中的所有更改
2、branch 查看新建分支
git branch# 列出所有本地分支 git branch -r# 列出所有远程分支# 新建一个分支,但依然停留在当前分支 这个时候本地已经有新分支了,但远程还没有,只有切换到新分支push后,远程就有了 git branch [branch-name] git checkout -b [branch]# 新建一个分支,并切换到该分支 git branch -d [branch-name]#删除分支 已合并的分支 *不能删除当前所在的分支 git branch -D dev#强行删除分支 分支未合并 git push origin --delete [branch-name]# 删除远程分支
3、log 查看提交记录
git log -数字 #表示查看最近几次的提交git log -p -2#显示最近两次提交的不同点git log --author#查看具体某个作者的提交git log --online#输出简要的信息
4、merge 合并分支
git merge [branch]#合并指定分支到当前分支
5、diff 解决冲突 制作补丁
合并分支时,如果两个分支都对同一文件进行修改,那么合并的时候就会有冲突。
git diff HEAD#比较当前工作区和上一次提交时文件的差异git diff HEAD^#比较上一次提交和上上次提交的文件差异git diff 分支名 #查看当前分支跟指定的分支的差异git diff 分支名1 分支名2 #查看两个指定分支(已提交的)的差异,分支2 跟分支1的差别git diff --name-only --diff-filter=U#查看冲突文件 这个太有用啦
HEAD用法
HEAD 最近一个提交
HEAD^ 上一次提交
HEAD^ ^ 上一次的 上一次的提交(倒数第三次)
HEAD^^^ 倒数 第四次的 提交
6、reset 版本回退
语法:git reset --hard 版本号 注意:回退只是在本地进行回退,远程仓库还是最新的,所以之后要先pull
git reset --hard HEAD^#将 Git 回退到上一个版本 也就是上上次提交的时候,这样就可以撤销当次提交的信息git reset --hard 4b2a0c8#版本号(commit id)没必要写全,一般写前七位就够了,Git会自动去匹配。
二、.gitignore 文件
大量与项目无关的文件全推到远程仓库上,同步的时候会非常慢,且跟编辑器相关的一些配置推上去之后,别人更新也会受其影响。所以,我们使用该文件,
对不必要的文件进行忽略,使其不被git追踪。
一把情况下,.gitignore文件,在项目一开始创建的时候就创建,并推送到远程服务器上。这样大家初次同步项目的时候,就是用到该文件,避免以后,团队
成员把与项目无关的文件,传到远程服务器上。
*.log#表示忽略项目中所有以.log结尾的文件123?.log#表示忽略项目中所有以123加任意字符的文件/error.log#表示忽略项目中根目录中的error.log 这个文件src/main/test/*#表示忽略/src/main/test/目录下的所有文件**/java/#匹配所有java目录下的所有文件!/error.log#表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定
对于已经提交到远程或本地仓库的文件,.gitignore配置之后不会生效。我们必须先删除本地暂存区里的文件,之后在加上.gitignore 文件,最后再把变更提交到远程仓库上。
git rm --cached 文件名#从暂存区删除某个文件git rm -rf --cached 文件夹#表示递归删除暂存区该文件夹的所有东西
三、案例
1、commit后,需要回到上一个版本,这个版本数据全部不要
(1)为保险起见,我们可以先切一个分支出来,保存当前版本,必然以后🈶️需要这个版本,又要重新开发
git checkout -b [branch]
(2)先本地代码回到上上次提交的版本
git reset --hard head^
(3) 提交本地代码到远程
如果你在直接add,commit后直接 git push。会报错
err: Updates were rejected because the tip of your current branch is behind
因为远程本地分支回滚后,版本将落后远程分支,所以你要先pull最新的,在push,这就很尴尬,因为最近一次提交的代码我都不想要了干嘛还要拉到本地
所以你只能强制提交 这是个非常危险的命令,因为它会把该版本之前commit的数据全部丢失
git push -f
2、你在master修改代码,却需要把修改后代码推送到dev远程分支上
(1)在master上
git add .
git commit -m "本次提交说明"
(2)切换到dev分支
git checkout dev
(3)合并master
git merge master
(4) dev分支提交代码 需要重新 add 和 commit
git push
参考
Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists)