Git常用技巧

198 阅读4分钟

总结了一些实际开发中常用的Git操作

git fetch

拉取远程代码,但是不会自动merge,想同步远端的前端代码,但是又不想把后端可能存在冲突的文件同步过来可以使用:
git fetch(git pull = git fetch + git merge

git rebase 和git merge

git merge 合并后会有一次merge的信息,这样会污染commit记录
git rebase不会生成新的commit,减少了一次无意义的mergecommit信息,简化了commit提交记录。
rebase后如果有冲突,解决冲突,执行git rebase --continue即可继续
git rebase --abort可以取消操作

git rebase -i HEAD~[number_of_commits] 可以用于合并提交(git rebase -i HEAD~3合并最近三次提交)

git reflog

git log 命令可以显示所有提交过的版本信息
git reflog命令可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。结合git reset --hard使用很香
例如执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,我们就可以买后悔药,恢复到被删除的那个版本。

git reset --hard commitid

代码不小心提交错了,不急,git reset有后悔药可吃
(1)git reset --hard commitid2)git push
(3commit错了想撤销,可以使用git reset --soft HEAD^回退回来

参数说明:
–mixed:不删除工作空间改动代码,撤销commit,并且撤销git add 操作
–soft:不删除工作空间改动代码,撤销commit,不撤销git add 操作
–hard:删除工作空间改动代码,撤销commit,撤销git add 操作

git remote add xxx url

需求:仓库迁移了,把当前分支的代码提交到另外一个仓库

可以这么做:
把在这个版本改动的文件一个个一个个拷出来,然后在新仓库上新拉一个分支,把文件一个个复制到对应位置

也可以这么做:
第一步:git remote add name(一般为origin,可以另起一个名字如origin_nta) url(仓库地址)
第二步:git push origin_nta xxx(分支名)

扩展:将一份相同的代码提交到多个不同的git服务器

git remote set-url --add name newurl
例如:git remote set-url --add origin git@code.xxx.org:test/example.git,这个时候提交会同时把代码提交到两个仓库

cherry-pick

需求:把当前仓库xx分支你修改的代码提交到另一个xx仓库的xx分支上

可以这么做:
把在这个版本改动的文件一个个一个个拷出来,然后在新仓库上基于要合并的分支新拉一个分支,把文件一个个复制到对应位置

也可以这么做:
第一步:git remote add name(一般为origin,可以另起一个名字如origin_nta) url(仓库地址)
第二步:git push origin_nta xxx(分支名),先把当前分支的所有代码提交到另一个仓库
第三步:去到目标仓库,git pull远程代码拉到本地,切换到刚刚从另一个仓库提交过来的那个分支
第四步:git checkout -b feature-xxx origin/master(master替换成要合入的那个分支)
第五步:git cherry-pick ,git cherry-pick ....
第六步:每cherry pick一次都可能产生冲突,如果有冲突,解决冲突后git commit即可,如果没有冲突,git 会提示,按照提示git commit --allow-empty即可
第七步:git push origin xxx

cherry-pick扩展:

1)git cherry-pick -x  // 增加 -x 参数,表示保留原提交的作者信息进行提交
(2)git cherry_pick start-commit-id…end-commit-id // 它的范围是 (start-commit-id~end-commit-id]
(3)git cherry-pick start-commit-id^...end-commit-id // 它的范围是 [start-commit-id~end-commit-id]

温馨提示:cherry-pick的时候不用pick解决合并冲突的commit_id,强行pick也会失败,另外如果不能保证都是自己的提交的情况下尽量一个个pick,使用范围pick很有可能把后台的提交也pick进去

在 Git 中忽略文件

创建一个名为 .gitignore的文件,把需要忽略的文件或者文件夹添加上去,也可以添加例外,使用!前缀
*.css  
*.vue  
min/  
!index.vue 

8. git stash save "save message"暂存

git stash pop // 取出暂存,还能把当前分支的改动在另一个分支取出来
git stash list //查看暂存列表
git stash pop stash@{num} //取出指定的暂存

9. git commit --amend

如果手残不小心打了一堆不知道是什么东西的注释,没关系,可以使用上面的命令进入vim修改注释信息,
输入i进入插入模式
修改完后wq退出保存编辑