总结了一些实际开发中常用的Git操作
git fetch
拉取远程代码,但是不会自动merge,想同步远端的前端代码,但是又不想把后端可能存在冲突的文件同步过来可以使用:
git fetch(git pull = git fetch + git merge)
git rebase 和git merge
git merge 合并后会有一次merge的信息,这样会污染commit记录
git rebase不会生成新的commit,减少了一次无意义的merge的commit信息,简化了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 commitid
(2)git push
(3)commit错了想撤销,可以使用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退出保存编辑