Git在工作中常用的几个案例

1. 设置本地关联远程代码库

 git remote add origin https://git.xxx.com/demo.git

2. 更新远程分支列表

 git remote update origin --prune

3. 删除本地及远程分支

需要先切换到其它分支进行操作;
 git push origin --delete add_test1     // 删除远程分支;
 git branch -d add_test1        		    // 删除本地分支;

4. 删除远程分支的目录/文件

 git rm -r -n --cached 文件/文件夹名称    // 查看要删除的文件列表
 git rm -r --cached 文件/文件夹名称   // 删除
 git commit -am "xxx"   // 提交到本地
 git push origin test  // 提到远程

5. 分支合并

 从dev合到test
 git checkout test   // 首先切换到test
 git merge --no-ff -m "merge说明" dev //合并dev分支
  --no-ff:保留之前的分支历史
 git rebase dev  // merge和rebase有很大的区别,merge会产生一个新的merge提交,而rebase会将原来dev的提交记录追回到test的提交记录后面;

6. 本地A分支提到远程B分支

 git commit -am '说明'
 git push origin abranch:bbranch  //  如果remote repository下不存在bbranch,则新创建一下;

7. 处理代码冲突

拉取代码时经常遇到:error: Your local changes to the following files would be overwritten by merge: xxx
处理方式:

 git stash save "说明"    // 隐藏本地代码
 git pull  // 拉取远程代码
 git stash pop // 恢复隐藏的代码,将缓存堆栈中的第一个stash删除

方式二:放弃本地的修改;

 git reset --hard commitID    // 强制回退本地代码至某次提交的状态;
 git pull

8. 本地dev改动了太多文件,但现在需要紧急切换hotfix分支修复bug

你现在正在开发,突然生产发现个bug,需要你切换到hotfix分支修复bug上线,但本地改动了太多文件该怎么办?
此时通过stash命令来处理,它的作用是隐藏代码;

stash默认会隐藏:添加到暂存区的修改(staged changes)、Git跟踪的但并未添加到暂存区的修改(unstaged changes) 但不会隐藏:在工作目录中新的文件(untracked files)、被忽略的文件(ignored files)

 git stash   // 隐藏本地暂存和非暂存的代码;
 git stash -u  // 隐藏包含工作目录中新增(未add)的文件;
 git stash -a  // 隐藏所有文件;
 git stash save "tag" // 隐藏时可以指定一下标识;
 git stash list  // 查看隐藏的列表;
 git stash pop // 将隐藏栈中的第一个stash删除,并将对应修改应用到当前的工作目录;
 git stash apply stash@{0}  // 恢复指定的stash,但不会删除stash;如果恢复第二次,则stash@{1}
 git stash drop stash@{0} // 删除
 git stash show  // 查看stash diff;
 git stash branch testB // 从stash创建分支;

9. 放弃本地代码的修改

 git branch dev_temp     // 将本地修改的所有代码生成一个新的本地分支,以防后面再需要;
 git fetch --all  // 从远程下载最新的,而不尝试合并或rebase任何东西;
 git reset --hard origin/dev  // 将主分支重置为刚刚获取的内容。--hard参数放弃所有的修改
 git pull  // 拉取远程最新代码;

10. 撤回add的文件

 git reset HEAD   // 撤回全部add的文件;
 git reset HEAD src/main/java/com/xx/Test5.java   // 撤回指定的文件;

11. 删除已经commit的文件

 git log // 查询提交记录;
 git reset --soft HEAD~1 // 即可回退到上次commit的状态,本地代码并不会消失
    –mixed:不删除工作空间改动代码,撤销commit,并且撤销git add 操作(默认)
    –soft:不删除工作空间改动代码,撤销commit,不撤销git add
    -hard:删除工作空间改动代码,撤销commit,撤销git add

 HEAD:表示当前所在分支提交到仓库的最近一次的commit;
 HEAD~{n}:当前提交版本的上n个版本
 	HEAD=HEAD~0
 	HEAD~=HEAD~`
 	HEAD~~=HEAD~2
 	HEAD~~~n~~~=HEAD~n

12. 远端代码回滚

 在做回滚之前,要保证当前工作区是干净的,,并且和远程分支代码一致;
 git branch test_temp  // 备份当前分支
 git revert commit_id   // 恢复到指定的commitId,正常情况下会产生一条commit; -n:不自动提交      -m:指定parentId,当commitId是merge提交时,需要这个;
 git push origin test   // 将回滚提交到远程;

说明:
git reset & git revert 区别:

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

git revert fcd8a10 -m 1 #撤回提交的commit id:fcd8a10 1代表当前分支 2代表在当前分支 merge的分支

13. 打tag

git tag v1.0           // 打tag
git push origin v1.0   // 推送到远程

14. 从指定tag剪出分支

git branch newBranch tagName   // 从指定tag切出一个新分支

git branch 新分支名称 tag名称

15. 指定commitid提交到远程

比如:在b1分支上进行了一系列的开发,此时需要将b1分支上的2sdf23f commitId提交到 master分支;

1. 切换到master
git checkout master
2. 使用cherry-pick命令
git cherry-pick  2sdf23f
3. 如果指定commitId的代码拉过来之后,有冲突的话是需要解决冲突的
git  push
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值