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 区别:
- git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
- 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