git使用过程中遇到的问题以及解决方法
记录了git使用过程中遇到的问题以及解决方法
git stash暂存文件
当前分支还未完成所有的工作,然而又需要切换分支或者不能继续工作,可以采用git stash
命令,切换回来以后再采用git stash pop
命令切回
在idea 2020版中使用git stash
命令有几率丢失文件
所以也可以commit 之后再切换分支然后再reset
git pull拉取分支
在团队开发时,可能出现增加了其他文件和修改统一文件的情况,此时需要git pull
先合并再push,若不想合并则先fetch
git pull和git fetch的区别
目的不同
git fetch:从远程获取最新版本到本地,但不会自动 merge,用于从远程跟踪分支下载和查看其他人完成的最新提交,但不将这些提交合并到本地存储库中。它从远程存储库中获取更改并将其存储在本地存储库中。
git pull:从远程获取最新版本并 merge 到本地,它会自动将提交合并到您的本地存储库中,而无需查看提交。
用途不同
git fetch:Fetch 只是通过将提交从远程存储库传输到本地存储库来使远程存储库的本地副本保持最新。将提交导入到本地分支将允许您跟上其他人所做的更改。
git pull:Pull 将更改引入本地代码存储库,以使用远程存储库更新本地存储库。
用法不同
git fetch:当您想要查看其他人正在处理的内容时,Fetch 命令非常有用,这使您可以在将更改与本地存储库集成之前轻松查看其他开发人员推送的提交。您可以通过使用命令“git fetch ”来做到这一点,该命令从远程存储库中获取所有分支。
git pull:您可以使用命令“git pull ”来执行拉取,该命令检索分支的远程副本并将其与本地副本合并。这与使用命令“git fetch ”后跟“git merge ”完全相同。
远端跟踪分支不同
git fetch:Git fetch能够直接更改远端跟踪分支。
git pull:git pull无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。
使用 git revert 回滚某次的提交
想象这么一个场景,你的项目最近有2个版本要上线,这两个版本还伴随着之前遗留的 bug 的修复,一开始的时候,你将 bug 修复在了第一个版本的 release 分支上,突然在发版前一天,测试那边反馈,需要把第一个版本修复 bug 的内容改在第二个版本上,这个时候,第一个版本的集成分支的提交应该包括了第一个版本的功能内容,遗留 bug 修复的提交和其他同事提交的内容,想要通过 reset 的方式粗暴摘除之前的关于 bug 修复的 commit 肯定是不行的,同时,这种做法比较危险,此时,我们既不想破坏之前的提交记录,又想撤回我们遗留 bug 的 commit 记录应该怎么做呢?git revert 就派上了用场。
git revert <commit-id>
针对普通 commit
git revert <commit-id> -m
针对 merge 的 commit
下面就用一个案例来理解一下这个命令,如下图所示,假设被红框框起来的地方是会引起 bug 的一次提交,在他的提交之后,又进行了2次提交,其中包含了其它同事的提交。
image-20210519142702752.png
此时想把引起提交的 bug 的干掉,执行 git revert 1121932
,执行操作后,再打开查看日志,如下图所示,可以看到是新增了一条 commit 记录,这个 commit 的产生的 msg 是自动生成的,Revert 开头,后面跟撤回的 commit-msg 信息 之前的 commit 记录并没有消失,此时也达到了代码回退的效果
image-20210519142824836.png
此外 git revert 也可以回滚多次的提交
语法:git revert [commit-id1] [commit-id2] ...
注意这是一个前开后闭区间,即不包括 commit1 ,但包括 commit2 。
回滚我们的提交有二种方式,一种是上文提到的git revert
命令外,还可以使用 git reset
命令,那么它们两者有什么区别呢?
git revert
会新建一条 commit 信息,来撤回之前的修改。
git reset
会直接将提交记录退回到指定的 commit 上。
对于个人的 feature 分支而言,可以使用 git reset
来回退历史记录,之后使用 git push --force
进行推送到远程,但是如果是在多人协作的集成分支上,不推荐直接使用 git reset
命令,而是使用更加安全的 git revert
命令进行撤回提交。这样,提交的历史记录不会被抹去,可以安全的进行撤回。