内网:gitlab 外网:github、码云
工作区 add 暂存区 commit 本地仓库
查看git版本(git bash和linux的命令一样)
git --version
git为了管理需要设置用户name 和 email
git config --global user.name "zhangsan"
git config --global user.email "zhangsan@126.com"
git初始化仓库(生成.git文件夹)
git init
本地仓库:
将文件提交到暂存区(只有git仓库中才支持下面的git命令)
git add Demo.txt
将暂存区的内容提交到本地库
git commit -m "这是我提交的第一个文件" Demo.txt
git status 看的是工作区和暂存区的状态
git log 查看历史提交记录
git log --pretty=oneline
git log --oneline
git reflog
git reset 前进或者后退版本
git reset --hard 版本索引(HEAD当前索引 可通过git reflog查看)
hard 参数:本地库的指针移动的同时,重置暂存区,重置工作区
mixed 参数:本地库的指针移动的同时,重置暂存区,但是工作区不动
soft 参数:本地库的指针移动的时候,暂存区,工作区都不动
git diff 对比文件
git diff 文件名: 将工作区的文件和暂存区中的文件比较
git diff: 比较工作区中和暂存区中的所有文件的差异
git diff 索引号 文件名: 比较暂存区和本地库中的文件比较
git push 远程仓库 本地分支:将本地分支推送到远程
冲突1:分支1修改了文件1的第一行并且提交到了本地仓库,分支2改了文件1的第一行并且提交到了本地仓库 此时分支2想要合并分支1的功能
进入分支2 git checkout branch2 合并分支1 git merge branch1
产生冲突(命令窗口显示 branch2|merging 表示处于冲突状态),进入文件修改冲突 (HEAD表示当前分支内容,====用于上下文件分割),
修改完毕后 git add 文件名 提交到暂存区-> git commit -m "解决冲突" (注意后面不能带文件名)至此,冲突解决
冲突2:分支1修改文件1的第一行提交到本地库成功push到远程库成功,分支2修改文件1的第一行提交到本地库成功push到远程库失败(有冲突)需要先pull
新增远程仓库并且给远程仓库取别名:git remote add 别名 giturl
git允许不相关历史合并:例如我们的源是origin 分支是master 那么可以 git pull origin master --allow-unrelated-histories(2.92版本)
远程仓库拉取 pull == fetch(将远程仓库内容拉取到本地,本地仓库内容没变 然后) + merge
git fetch 远程别名 远程库对应分支 : 将远程库的内容拉取到本地,本地仓库内容没变
原理:svn是将工作目录的文件拷贝了一份到远程仓库,git是基于文件描述(类似一个数据库或者文件系统 文件有:文件盘、目录结构(tree对象)、内容(blob对象))
find ./git/objects/ -type f
git cat-file -t .git/objects/文件 查看文件类型
git cat-file -p .git/objects/文件 查看文件内容
当前分支HEAD指向master,master指向commit索引,切换分支就是更改commit索引
git 部分相关命令
echo "echo info to file" > xxx --把内容输入到一个文件
git add xxx
git add -A -- 把工作空间的所有内容添加到暂存区
git commit -m "xx"
git commit -am "xx" --把暂存区的所有内容添加到本地工作区
git checkout readme.txt --cache to work file恢复一个文件 file1 file2 恢复两个文件 .恢复所有文件
git status
git diff --默认查看工作区和cache
git diff --cached --比较cache和repository
git diff HEAD --工作区和最新的repository
git diff commit-id --工作区和指定的repository
git diff --cached commit-id
git diff --commit-id commit-id
git reset HEAD^
git pull
git branch -- -a查看所有分支 -av查看所有分支信息 -avv 查看所有分支信息和关系
git branch xxx --基于当前分支创建分支
git branch newBranch oldBranch --基于oldBranch创建分支
git branch -d xxx --删除分支
git cat-file -p commitid --查看文件内容(相关文件压缩了不能直接查看)
git cat-file -t commitid --查看对象类型 blob commit tree
Fork原项目新增分支的同步和推送
获取远程分支内容
git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地(本地仓库没改,改变的是.git\refs里面对应的远程的commit索引)
切换分支:$ git checkout production
推送本地分支到origin(远端私仓):$ git push origin (本地分支名)
关联本地分支与远程分支:
使用git在本地新建一个分支后,需要做远程分支关联。如果没有关联,git会在下面的操作中提示你显示的添加关联。
关联目的是在执行git pull, git push操作时就不需要指定对应的远程分支,你只要没有显示指定,git pull的时候,就会提示你。
解决方法就是按照提示添加一下呗:
git branch --set-upstream-to=origin/remote_branch your_branch
其中,origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。
参考:https://www.jianshu.com/p/d0271da9f3ac
https://blog.csdn.net/wpflove/article/details/79732259