Git简介
Git是一个分布式的版本控制系统,与集中式的版本控制系统不同的是,每个人都工作在通过克隆建立的本地版本控制库中。也就是说每个人都拥有一个完整的版本库,查看提交日志、提交、创建里程碑和分支、合并分支、回退等所有操作都直接在本地完成而不需要网络连接。
Git三大区
git常用命令
- git init —– 初始化本地仓库
- git status —– 查看当前仓库状态
- git add —– 将工作区的修改提交到当前分支
提交指定文件:git add *.文件后缀 提交全部文件:git add .
- git commit —– 将暂存区的修改提交到当前分支
git commit –m “本次提交描述”
- git push origin master —– 把代码推送到仓库
- 忽略不想上传的文件
在项目上新建一个
.gitignore
文件,然后把不想上传的文件名写入.gitignore
文件中。
1、git pull 拉取分支
- 将远程指定分支 拉取到 本地指定分支上:
git pull origin <远程分支名>:<本地分支名>
- 将远程指定分支 拉取到 本地当前分支上:
git pull origin <远程分支名>
- 将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支):
git pull
2、git push 推送分支(注意:pull是远程在前本地在后,push相反)
- 将本地当前分支 推送到 远程指定分支上:
git push origin <本地分支名>:<远程分支名>
- 将本地当前分支 推送到 与本地当前分支同名的远程分支上:
git push origin <本地分支名>
- 将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支):
git push
3、拉取远程仓库的分支到本地
- 命令:
git checkout -b 本地分支名 origin/远程分支名名
若出现错误提示,需要先执行
git fetch
fatal: Cannot update paths and switch to branch ‘xxx’ at the same time.
4、撤销分支的合并Merge
git log
找到需要回退的分支版本,执行git reset --hard <commit-id>
回退
5、版本回退
git log
找到需要回退的分支版本,执行git reset --hard <commit-id>
回退,执行git push -f
推到远程同步
6、取消版本回退
git reflog
查看命令历史,以便确定要回到未来的哪个版本,执行git reset --hard <commit-id>
回退
7、基于某个分支开一个新分支,并推送到远程仓库
- 基于远程分支代码代码开一个本地分支:
git checkout -b <新分支名> <远程主机名>/<远程分支名>
- 把新分支推送到远程仓库:
git push -u <远程主机名> <新分支名>
(或git push <远程主机名> <远程分支名>
+git branch --set-upstream-to=<远程主机名>/<远程分支名> <本地分支名>
)
8、将本地分支推送到远程,并且相关联
git push --set-upstream origin <本地分支名>
或git push -u origin <本地分支名>
9、修改本地分支名称
-
当前在该分支上:
git branch -m <新分支名称>
-
当前不在该分支上:
git branch -m <旧分支名称> <新分支名称>
10、git stash临时保存更改内容(无需提交),在后续可恢复
-
保存到
stash
中,并添加标识:git stash save "stash的标识"
- 显示所有已保存的
stash
列表:git stash list
输出列表:
(stash@{index}: on [分支名]: [标识信息])
stash@{0}: On BianZhi: Bianzhi
stash@{1}: On BianZhi: ConsoleLog增强
-
恢复某个
stash
:git stash apply stash@{index}
-
恢复某个
stash
并将其从stash
列表中删除:git stash pop stash@{index}
-
删除某个
stash
:git stash drop stash@{index}
- 清空所有已保存的
stash
:git stash clear
11、远程新建一个分支,但在编译工具搜索不出来时,可以通过以下命令更新远程分支的显示
- 第一种:
git fetch
git fetch 拉取分支,远程被删除的分支不会同步删除本地origin的分支(origin/xxxx) EG:你有个本地分支feat,然后也有本地origin/feat,假设remote新增了test分支且其他人删除了remote的feat则git fetch可以在本地产生origin/test(但没有本地分支test,这个要你checkout到test的时候才会产生),但不会删除本地的origin/feat
- 第二种:
git update origin --prune
必须带有–prune,否则跟git fetch等价。除了会拉取新分支,本地还会删除掉别人远程删除的分支 EG:按第一种的的例子,执行这个命令后可以拉取origin/test(但没有本地分支test),且删除本地的origin/feat(但不会删除你本地的分支feat)
或 git remote update origin --prune
git fetch
和 git remote update origin --prune
的区别
git fetch 拉取分支,远程被删除的分支不会同步删除本地origin的分支(origin/xxxx)