git相关
- 注意点:
-
git命令log与reflog的区别:
- git log 命令可以显示所有提交过的版本信息(commit)
- git reflog 可以查看所有分支的所有操作记录(包括已经被删除的commit记录和reset的操作)
-
git log命令只是将最开始到当前版本的所有的commit id打印出来,而如果当前这个版本是由最新版本回退来的,那么最新版本的信息并不会通过git log命令打印出来(例如执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,我们就可以买后悔药,恢复到被删除的那个版本。)
1.当我们调用 git log --pretty=oneline 命令后,显示的结果为: 557ced45a3965430d4d485864709a0b58c8f0053 又修改了a.txt 0ffd57a25d96ba67d996c07462850fe10eaadbf0 修改了a.txt文件 ee402f5927b1b0d81632260527a92763da25c26d 创建了a.txt文件 203e1db947fa11267d7682b598094f5a7b013a8d 新建了readme.txt文件 可以看到最新的版本为"又修改了a.txt"这个 2.此时我们要回退到上一个版本(执行git reset --hard head^ 命令),显示的结果为: $ git reset --hard head^ HEAD is now at 0ffd57a 修改了a.txt文件 再执行git log --pretty=oneline命令,发现结果如下: $ git log --pretty=oneline 0ffd57a25d96ba67d996c07462850fe10eaadbf0 修改了a.txt文件 ee402f5927b1b0d81632260527a92763da25c26d 创建了a.txt文件 203e1db947fa11267d7682b598094f5a7b013a8d 新建了readme.txt文件 此时这里是并不存在"557ced45a3965430d4d485864709a0b58c8f0053 又修改了a.txt这个的",因为已经被回退了,当前最新的就是"修改了a.txt文件"这个版本 那么如果我后悔回退了呢,我现在就想回到"又修改了a.txt"这个版本该如何操作呢? 首先执行 git reflog命令,得到结果如下 $ git reflog 0ffd57a HEAD@{0}: reset: moving to head^ 557ced4 HEAD@{1}: reset: moving to 557ced4 0ffd57a HEAD@{2}: reset: moving to head^ 557ced4 HEAD@{3}: reset: moving to 557ced4 0ffd57a HEAD@{4}: reset: moving to head^ 557ced4 HEAD@{5}: commit: 又修改了a.txt 0ffd57a HEAD@{6}: commit: 修改了a.txt文件 ee402f5 HEAD@{7}: commit: 创建了a.txt文件 203e1db HEAD@{8}: commit (initial): 新建了readme.txt文件 所有的操作记录都在这里了,此时找到"又修改了a.txt"版本对应的id(557ced4),再执行git reset --hard 557ced4命令,就得到了如下结果 $ git reset --hard 557ced4 HEAD is now at 557ced4 又修改了a.txt 此时就回到了我们最开始的状态
-
git checkout -- filename(撤销修改,这是针对单个文件或者单个操作而言,不是针对整个版本,--后面有空格)的注意点.
- 如果当前的修改被加到了缓存区,即调用了add命令,那么不管有没有调用commit命令,再执行git checkout撤销时,都会回到添加到缓存区的状态
- 如果当前的修改没有加到缓存区,即没有执行add命令,只是在工作区而已,那么再执行git checkout撤销时,当前所有的修改都会消失,回到最新提交commit时的状态(等于你的代码白写了...)
- 总之,就是让这个文件回到最近一次 git commit 或 git add 时的状态.
-
删除文件后也要记得add和commit一下,保证和本地版本库状态一致
-
分支管理
- 查看当前分支 git branch
- 新建分支 git branch 分支名字
- 切换分支 git checkout 分支名字
- 创建分支并同时切换到分支 git checkout -b 分支名字(注意这里的-b是固定写法,创建的意思,后面才是我们为分支取的名字)
- git merge 分支名字(将分支合并到当前分支,比如当前分支为dep,而要合并的分支bt,那么git merge bt的意思就是将bt分支合并到dep这个当前分支)
- 注意注意注意:如果在某一个分支创建了文件或作了修改,不管是否add,只要没到commit这一步,那么在其他任何分支都能看到当前创建的文件或作的修改,所以得出结论:在工作区和缓存区做的所有操作都被所有分支共享,所有分支都可以对其进行操作,只有被某一个分支commit后才会归属到那个分支.
- 删除分支(被删除的分支不能是当前的分支):git branch -d 分支名字
-
在idea中,在分支A修改了代码,但是没有commit就直接合并到其他分支(比如主干)时,会将所做的修改合并到其他分支去,但是分支A自己的修改就丢失了,只有分支A先commit再合并到其他分支,才会两边都有修改状态
-
网友评论