Git 使用注意事项

Git是一款优秀的版本管理的工具。

基本命令及其用法

git merge 合并分支,将目标分支合并到当前分支

git fetch  更新远端分支,但不会merge到本地

git pull   更新远端分支并merge到本地

git clone   从远程仓库拉取代码

git checkout  切换分支,-b 如果分支不存在则创建

git branch 查看分支, -help查看多种用法

git revert [commit id] 撤销制定commit ID带来的更改,并且重新生成一个commit

git reset [commit id]  复位commit ID,将head指针指向制定commit ID,常用参数有四个

 

parameter
 Explanation 

--Soft

Files won't change, differences will be staged for commit.
--Mixed Files won't change, differences won't be staged.
--Hard Files will be reverted to the state of the selected commit. Warning: any local changes will be lost.
--Keep Files will be reverted to the state of the selected commit, but local changes will be kept intact

 

修改回退操作

通过 git checkout --[fileName/.(当前目录所有文件)] 命令可以撤销文件在工作区的修改。

通过 git reset [fileName/.(当前目录所有文件)] 命令可以撤销指定文件的 git add 操作,即这个文件在暂存区的修改。

git cherry-pick [commit id],commit Id来自于其他分支,如果出现冲突,需要手动解决,生成一个新的commit在当前分支最新提交后面。

 

git rebase 变基 base英文意为重新以...为根基,顾名思义是将当前的commit重新放到一个新的分支上。git rebase一般有下面两个用法
1. 更新其他分支变更到自己的分支

如果存在master,dev两个分支,且dev落后于master,现在希望把master最新的改动同步到dev,不使用merge操作,那么可以使用rebase命令,可以减少多余的commit记录,使得提交记录更加清爽。执行rebase命令所在的分支是需要移动的分支,如下图,feature1是以master1为基础切换过来,在feature1分支上进行git rebase master后,feature1的“base”变为了master4,之后切换到master进行merge操作,这个merge是fast-forward模式。这也就是rebase的效果。

注意:只有当feature1还未push到远端,才会有下面右图的效果。如果已经提交到远端,再次进行pull操作时候,仍然会产生一个merge commit。

2. 合并commit

git rebase -i HEAD~n   n代表squash多少个commit

git rebase -i [your commit id]  [your commit id]代表你所要squash的一串commit最远一次提交的上一次提交commit

git rebase -i [startpoint[endpoint] 前开后闭区间,squash的commit时间范围 [startpoint] < range <= [endpoint]

 

操作注意事项

"If you follow this guideline, you’ll be fine. If you don’t, people will hate you, and you’ll be scorned by friends and family."

  1. push之前先pull(自动合并,如果有冲突需要手动解决)
  2. 如果只是希望看到远端最新代码,使用fetch 命令,并且在本地手动merge并解决冲突(如果有的话)
  3. 如果本地有文件还在暂存区,请先本地commit,然后进行pull操作,否则如果存在冲突并解决后,希望回退到自己的代码,则无法实现,所以commit一次就很重要,给git提供一个回退的commit id.
  4. 如果希望回退到之前的某个commit id,请使用revert操作(可能需要多次),这样commit时候会产生一个新的commit,可以看出此地曾经存在一个回退。当然如果知道自己在回退操作,也可以使用reset,推送到远程仓库需要git push -f操作,但是你需要确定在commit时间和执行push操作的之间时间段,没有其他人提交新代码,否则不要这么做。
  5. 多人协作时候推荐merge而不推荐rebase,除非开发分支只有一个开发人员才可以考虑使用rebase。
  6. 使用git rebase进行squash时候,只对本地的commit进行操作,不要对已经push的commit操作,因为需要进行git push -f,但是这样会覆盖别人的提交,有很大风险,同时也会生成新的merge commit,反而效果上适得其反。
  7. push自己的commit之前,先考虑下是否需要合并commit,进行squash,不要一个commit只涉及到一个无关紧要的修改。可以随时commit,不要随时push。
  8. git merge操作时候如果自动解决冲突的情况下,commit的提交信息是很标准的,如果需要手动解决冲突,提交信息要记录为[source branch]merge to [target branch]: [your message],不可遗漏branch信息,以后回溯时候不太好查看。
  9. 如果希望在更新远端代码时候,不愿意生成一个merge commit,那么可以在git pull加上–rebase参数,是得本地分支变基到远端最新commit上。

对于我来说,如果是自己一个人的开发分支,那么上述的很多命令都可以随意使用,是自己的分支更加清晰整洁,如果是和其他人的协作分支,最好老老实实的git merge!

参考书目 在线git教程

posted @ 2021-09-28 10:01  caizhenya  阅读(360)  评论(0编辑  收藏  举报