一、基本pull和push流程
新的版本
git stash暂存本地代码git pull更新远程仓库的代码到本地git stash apply取出暂存本地代码git add .工作区内容提交到暂存区git commit -m "提交日志"暂存区的内容提交到当前的分支git push提交本地的代码到远程仓库
旧的版本
git add .工作区内容提交到暂存区git commit -m ""暂存区的内容提交到当前的分支git status查看当前分支的状态,是否有未更新的内容git pull 或 git pull --rebase更新远程仓库的代码到本地git push提交本地的代码到远程仓库
关于git pull和git pull --rebase的原理看下面
多人协作开发项目,在上传代码时通常会先pull一下远程代码,使本地与远程同步更新,但是如果远程此时与自己代码存在冲突,在解决冲突后提交有时会出现“Merge branch ‘master’ of …”这条信息。这是因为pull其本质是fetch+Merge的结合。通常会分为以下两种情况:
- 如果远程分支超前于本地分支,并且本地也没有commit操作,此时pull会采用’fast-forward’模式,该模式不会产生合并节点,也即不产生"Merge branch ‘master’ of …"信息。
- 如果本地有commit提交,此时若存在冲突,pull拉取代码时远程和本地会出现分叉,会进行分支合并,就会产生"Merge branch ‘master’ of …"信息。
解决方法
使用git pull --rebase命令,如果没有冲突,则会直接合并,如果存在冲突,手动解决冲突即可,不会再产生那条多余的信息。如果你不想每次都rebase,可以在git bash里执行
git config --global pull.rebase true
这个配置就是告诉git在每次pull前先进行rebase操作。
二、创建、删除、推送、合并分支、解决冲突
git checkout -b dev创建dev分支并切换到dev分支git push origin dev推送本地的dev分支到远程分支上git branch --set-upstream-to=origin/dev dev本地dev分支与远程分支建立连接git branch -d dev删除本地的dev分支(若需要删除远程分支,看下面的)git branch -r -d origin/dev之后运行git push origin :dev删除远程仓库的dev分支git merge --no-ff -m 'dev-->master' devdev分支的内容合并到当前所在的分支(例如当前分支为master)git rebase --continue解决完本地冲突之后,使用该指令合并修改的代码并提交到当前的分支
三、撤销工作区与暂存区的内容
git checkout -- .撤销工作区内容git reset HEAD .撤销暂存区的内容
四、版本回退
git log查看远程库所有提交的git日志 hash值等信息git reset --hard HEAD查看当前版本存在的hash位置git reset --hard ae35ko当前版本回退到ae35ko这个hash的提交上git push --force回退版本之后强制推送到远程仓库git reflog查看本地自己所有的git提交操作(仅仅指开发者本人的git操作记录)
五、临时储备代码去解决项目bug
git stash储备本分支的代码到某个地方,临时去解决这个分支上着急上线的问题git stash save "Feature A changes"如果多次stash需要添加日志git stash list查看已经储备的代码git stash apply恢复存储的代码到工作区,但是不删除这个存储git stash apply stash@{id}恢复指令ID的缓存内容,并且保留缓存条目git stash drop删除存储的代码git stash pop恢复存储的代码到工作区并删除这个存储,是apply和drop的集合
六、强制更新master的代码与线上保持一致
git fetch --all拉取所有更新,不同步git reset --hard origin/master本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件)git pull再更新一次(其实也可以不用,第二步命令做过了其实)
七、更新git仓库为新的地址
git remote set-url origin +新地址
八、vscode找回丢失且又没有存储git的代码
- 在vscode界面,按住Ctrl+shift+p打开命令面板
- 选择“本地历史记录”
- 根据最近的编辑时间找到想要恢复的文件,复制代码即可
九、删除Git记录中的大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"查看哪些历史提交过文件占用空间较大。
1. rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。
2. --objects:列出该提交涉及的所有文件ID。
3. --all:所有分支的提交,相当于指定了位于/refs下的所有引用。
4. verify-pack命令用于显示已打包的内容。’
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all使用以下命令,删除历史提交过的大文件
1. 上面脚本中的big-file.jar请换成你第一步查出的大文件名,或者这里直接写一个目录。
2. filter-branch命令可以用来重写Git仓库中的提交
3. --index-filter参数用来指定一条Bash命令,然后Git会检出(checkout)所有的提交, 执行该命令,然后重新提交。
4. –all参数表示我们需要重写所有分支(或引用)。
-
git push origin master --force推送修改后的repo -
rm -rf .git/refs/original/; git reflog expire --expire=now --all; git gc --prune=now清理和回收空间
虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间
如需转载,请注明出处。。 如有不对的地方,大家及时留言指正,在修改。。