git常用命令

987 阅读5分钟

一、基本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的结合。通常会分为以下两种情况:

  1. 如果远程分支超前于本地分支,并且本地也没有commit操作,此时pull会采用’fast-forward’模式,该模式不会产生合并节点,也即不产生"Merge branch ‘master’ of …"信息。
  2. 如果本地有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' dev  dev分支的内容合并到当前所在的分支(例如当前分支为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的代码

  1. 在vscode界面,按住Ctrl+shift+p打开命令面板
  2. 选择“本地历史记录”
  3. 根据最近的编辑时间找到想要恢复的文件,复制代码即可

九、删除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), 所以我们要用命令彻底清除它, 并收回空间

 

如需转载,请注明出处。。 如有不对的地方,大家及时留言指正,在修改。。