【Git】(2)---checkout、branch、log、diff、.gitignore

常用命令

 

一、命令

     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)

我只是偶尔安静下来,对过去的种种思忖一番。那些曾经的旧时光里即便有过天真愚钝,也不值得谴责。毕竟,往后的日子,还很长。不断鼓励自己,

天一亮,又是崭新的起点,又是未知的征程(上校19)

 

posted on 2018-10-09 22:31  雨点的名字  阅读(2055)  评论(0编辑  收藏  举报