初始化与基本命令
- 本地创建的目录初始化为git仓库
git init - 关联到远程仓库,前提是有git账号并已在远程创建将要关联的项目
git remote add origin <远程ssh仓库地址>
或者使用git clone命令克隆一份到本地,可以免去前面两步,个人比较喜欢这种方式 - 工作区修改后添加到暂存区
git add <文件名称> - 撤销工作区的修改,恢复到版本库中当前分支的版本或者上一次commit或者add的状态
git checkout – <文件名称> - 撤销暂存区的修改,回退至工作区
git reset HEAD <文件名称> - 暂存区的内容提交到版本库当前分支
git commit -m “本次修改说明,便于后期追溯” - 查看本地仓库当前状态
git status - 推送到服务端,第一次推送使用-u可以将本地与远程关联起来,之后再推送可省略
git push [-u] origin <分支名称> - 多人协作开发时,推送代码到远程分支前,建议先将远程分支代码与本地分支代码合并
git pull = git fetch + git merge
回退版本并推送至服务端
- 查看提交历史或者命令历史
git log
git log --graph --pretty=oneline --abbrev-commit - 查看所有执行过的命令的日志,即对分支所做的任何修改,通过reset HEAD弥补犯下的错误
git reflog - 本地分支回滚到指定提交,硬重置,恢复到提交前的状态 ,工作区与暂存区所做修改将丢失
git reset --hard <要回退的分支的commit ID> - 本地分支回滚到指定提交,软重置,恢复到提交前的状态 ,保留工作区与暂存区所做修改
git reset --soft <要回退的分支的commit ID> - 版本回退后,直接push到服务端会提示你先pull下,所以需要强制推送到远程分支
git push -f origin <本地分支名称>
分支-增删查
- 查看当前分支
git branch - 删除分支
git branch -d <要删除的分支名称> - 强制删除分支
git branch -D <要删除的分支名称> - 新建分支并与远程分支关联,如果是在服务端新创建的分支,本地先git pull下最新的分支信息,否则可能会出现远程分支不存在的问题
git checkout -b develop origin/develop
develop是创建的本地分支名称,origin/develop是与之关联远程分支名称,同时会直接把远程develop分支的代码pull下来并切换到develop分支 - 切换到已存在的分支
git checkout <存在的分支名称> - 基于当前分支创建并切换到新分支
git checkout -b <创建的新分支名称> - 本地新创建的分支与远程分支关联,否则推送会失败
git branch --set-upstream-to <本地分支名称> origin/<远程分支名称>
-本地新建的分支推送到远程,并在远程创建对应的分支
git push --set-upstream origin <本地分支名称>:<远程分支名称> - 快速合并分支到当前分支,如果当前分支为master,则将dev分支合并到master,出现冲突解决后,执行add后表示冲突解决
git merge dev - 同上,但合并后的历史有分支,便于追溯
git merge --no-ff -m “合并message” dev (进入vim后,按esc后,:wq) - 合并冲突时,撤销合并操作
git merge --abort - 只merge A分支的一次提交到B分支,先切换到B分支,执行如下命令
git cherry-pick <需要merge的commitID> - 合并冲突时,撤销合并操作
git cherry-pick --abort - rebase 如当前操作分支是dev,如果远程dev分支有新的提交,当push时会提示你先pull,pull命令执行后本地提交记录会出现分叉,执行如下命令,提交记录变成一条直线
git rebase - 基于某个分支执行rebase,如当前分支为dev,执行如下命令会dev会更新到master分支最近所有的修改,git提交历史会是一条直线,而且可以防止以后合并时发生冲突
git rebase master - 交互式rebase,如当前分支为dev,执行如下命令可对dev中的提交进行操作:如合并多个提交为一个提交(可能会出现冲突,按照平时的冲突解决即可)、删除某次提交、修改某次提交的信息等,不要在公共分支使用该命令,在自己建的分支折腾,否则会给团队其他人造成不便,具体如下:
- git rebase -i 【start commit】(end commit,不输默认为HEAD )
- git rebase -i HEAD~3 (表示当前分支最近的三次提交)
pick:使用该提交
reword:使用该提交,并修改提交的信息;
edit:修改该提交的文件的内容,不仅仅是commit信息;
squash:将该提交与前一个提交合并;
fixup:将该提交与到前一个提交合并,但不保留该提交的信息;
exec:在该提交上执行shell命令;
drop:移除该提交。
迁移仓库
git clone --mirror <老仓库的git地址>
cd <克隆下来的项目目录>
git remote set-url origin <新的git项目的地址>
git push -f origin
如果需要保留原仓库的提交历史,则从新仓库拉代码时使用如下命令
git pull origin master --allow-unrelated-histories