多人开发同一个项目难免出现一些代码合并冲突的问题,大部分我们都会做rebase,下面是一般操作,发现对命令行操作生疏,于是做了一些总结:
- 本地master更新到最新
- 回到需要rebase的分支,然后操作git rebase master
- 解决冲突
- 执行git rebase --continue
- 如果有冲突继续解决,循环执行
- 最后gl
- gcmsg "解决冲突"
- gp
- ...
git命令操作的简写(ps:老大喜爱简写,有时候莫名的甩出个命令,一脸懵O(∩_∩)O哈哈~,推荐一个比较详细的可以看看)
git merge
分支合并会被记录为一次合并提交,这种做法是很有意义的。比如说,可以通过这种方式来标识一个新特性被合并到了发布分支中。不过,当多个团队成员工作在一个项目中并使用常规的git pull来同步分支时,提交时间线就会被不必要的合并提交所污染。
git rebase
将一个feature分支变基到master分支:
git checkout feature
git rebase master
这么做会将整个feature分支移动到master分支的起点,它会合并master分支上所有新的提交。不过,相比于使用合并提交来说,变基会通过在原来的分支中为每次提交创建全新提交来重写项目历史。变基的主要好处在于你会得到一个更加整洁的项目历史。
git rebase 后解决合并冲突
这里Git会给你提供3个选择来解决冲突:
- 可以运行
git rebase--abort
来完全取消变基。这么做会取消变基修改,并将分支置回到执行git rebase之前的状态。 - 可以运行git rebase --skip来完全忽略该提交。这样,有问题的提交所引入的变化就不会被添加到历史中。
- 可以使用与合并冲突相同的标准步骤来解决冲突。
git stash
当你在一个分支上开发未完成,东西比较乱的时候,你又要切换到别的分支工作,如果你不提交的话,切换是不行的,但是你又不想提交,这时
你就可以使用git stash命令,它会接受工作目录的当前状态,并将其保存到未完成的修改栈中,这样后面随时可以再来修改。
git stash list // 再回到feature分支后,你就可以取回所有暂存的变更了。
git stash pop // 在feature分支上未为提交暂存的更改。
git stash save "describe it" // stash命名
git stash clear // 删除已存储的提交
git stash save --keep-index // 仅存储未暂存的文件
git remote
克隆一个特定的远程分支
通常我们会用到的命令是git clone ,但是这个命令会将所有的其他分支一并克隆下来,而 git remote add 就可以实现;
git init
git remote add -t-f origin
git checkout
这里还有一些远程操作:
git remote -v // 查看远程版本信息
git remote show <remote-name> // 查看指定远程版本信息
git remote add <remote> <url> // 添加远程版本库
git remote rename // 修改某个远程仓库在本地的简称, 比如想把pb改成paul,可以这么运行:
git remote rename pb paul
git fetch <remote> // 从远程库获取代码
git pull <remote> <branch> // 下载代码及快速合并
git push <remote> <branch> // 上传代码及快速合并
git push <remote> : <branch/tag-name> // 删除远程分支或标签
git push --tags // 上传所有标签
git cherry-pick
将远程仓库的一个特定提交合并到自己的分支中
git cherry-pick <commit id>
// git 从1.7.2 版本开始支持批量的cherry-pick
git cherry-pick <start-commit-id>..<end-commit-id> // 不包含start-commit-id的区间
git cherry-pick <start-commit-id>^..<end-commit-id> // 包含start-commit-id的区间
// start-commit-id 在时间上必须早于end-commit-id
git blame
该命令会显示出文件中每一行的作者,提交的hash则会找出该行的上一次修改,还可以看到提交时候的时间戳。
git log / git log -p <file>
前者作用是查看提交历史,后者是查看指定文件的提交历史
git reset 和git checkout
git reset // 撤销工作目录中所有未提交文教的修改内容
git checkout . // 本地修改了一堆文件(并没有使用git add到暂存区),想放弃修改(所有文件)
git reset HEAD filename // 本地修改/新增了一堆文件,已经git add到暂存区,想放弃修改
git checkout HEAD <file> // 撤销指定的未提交文件的修改内容
git reset <commit>
撤销指定的提交
git clean
$ git clean -f // 删除未跟踪的文件
$ git clean -fd // 删除未跟踪的文件目录
$ git clean -nfd // list all files/directories that would be remo
额外说一个用法:将项目文件打成tar包,并且排除.git目录
tar cJf.tar.xz/ --exclude-vcs
暂时就这么多了,比较笼统,之后县肝功能总结一下,如有错误,欢迎指出(__) 嘻嘻……