git config --global user.name 'xueshanshan'
//git初次配置
git config --global user.email 'xueshanshan@huli.com'
git cherry-pick commitid
//在第二个分支中把第一个分支的某次提交拉过来
git commit --amend
//补充上次提交
首先,可以试图用git push origin <branch-name>
推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin <branch-name>
推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
git branch -a
//查看所有分支,包含远程的
git branch --v
//查看本地分支与远程分支对应关系
git branch new_branch
//在当前分支的基础上,创建新分支
git branch new_branch commitId
//在当前分支基础上,以某个commit创建新分支
git checkout <branch>
//切换分支,如果不存在,将会根据同名的远程分支创建新的本地分支,如果找不到重名的,将会报错,如果本地分支存在,则直接切换
也可以使用 git checkout -b <local_branch_name> remotes/origin/dev-3.3
//明确指定哪个远程
git拉取远程分支并创建本地分支
git checkout -b <branch_name>
在当前本地分支上创建新的本地分支
git checkout --merge <branch>
//在切换分支的时候,将当前分支修改的内容一起打包带走
重命名本地分支
git branch -m old_local_branch_name new_local_branch_name
重命名远程分支
git branch -m old_local_branch_name new_local_branch_name
//step 1:先重命名本地分支
git push origin :old_local_branch_name
//step 2:删除远程分支
git push origin new_local_branch_name
//step 3:重新推送新的本地分支
删除分支
删除的分支不是当前正在打开的分支 git branch -d <branch_name>
删除正在打开的分支 git branch -D <branch_name>
删除远程分支git branch -r -d origin/<branch_name>
//只是删除本地索引,并不是真正删除远程分支内容
真正删除远程分支 git push origin :<branch_name>
stash命令
git stash
可用来暂存当前正在进行的工作,比如想pull最新代码,又不想添加新的commit,或者另外一种情况,在修改了部分代码后,为了fix一个紧急的bug,先stash当前的工作,返回到上一次commit,改完bug push后再stash pop,继续原来的工作
基础命令:
git stash'
git stash pop
进阶:git stash save "描述"
当多次使用git stash命令后,栈里会有好多未提交的代码,
git stash list
可以将当前的栈信息打出来,只需要找到对应的版本号,如 git stash apply stash@{1}
就能将对应的工作取出来
git stash drop stash@{1}
//移除对应stash
git stash clear
//删除所有缓存stash
git stash bransh
//从stash创建分支
add完某个文件后将其从暂存区移除:
git rm --cached a.txt
git checkout -- a.txt
撤销命令含义:两种情况
1 a.txt修改了,但是还没有add到暂存区 撤销后就回到和版本库一模一样的状态
2 a.txt修改了,并且add到了暂存区,又做了修改,撤销修改就回到添加到暂存区后的状态
add完某个文件后想放弃add 并丢弃修改
先使用git reset HEAD a.txt
然后 git checkout -- a.txt
同步远程分支,如果远程有被删掉的分支就会被同步
git remote update origin --prune
或git pull --prune
变基
如果两个分支同时修改了同一个类,比如master和dev都修改了a.txt,那么如果master去merge dev的内容,那么merge后的合并图会非常混乱,会有两个commit 一个merge并且不再一条直线上,如果有多次这样的情况,历史log就会非常乱,为了使log图能够更加简单,成一条直线,通常本地出现冲突的时候会使用变基–rebase来代替合并–merge
- 首先切到dev分支
git checkout dev
git rebase master
此时会失败,需要先解决冲突,解决完之后git rebase --continue
- 然后切换到master分支
git checkout master
- 合并dev
git merge dev
- 查看log
git log --graph --pertty=oneline --abbrev-commit
变基原理:首先找到两个要整合的分支的共同祖先,然后取得当前所在分支的每次提交引入的更改,并把这些更改保存为临时文件,这之后将当前分支重置为要整合到的分支,最后在该分支上依次引入之前保存的每个更改。说白了就是记录dev的更改并保存,然后把每次的更改依次引入master分支,这样相当于所有的更改都改在master上,merge和rebase的结果相同,但是提交历史完全不同。