常用命令
mkdir <文件夹名> ---创建文件夹
cd <文件夹名> ---打开文件夹
ls ---显示项目目录
vi <文件名> ----打开文件
英文模式下的 i/insert --进入编辑模式
英文模式下的 esc ----推出编辑模式
英文模式下的 ZZ/:wq ---退出修改
git status ---查看工作目录的状态(未添加追踪、待提交、提交状态)
git branch -a ---查看远程分支状态
git branch ---查看本地分支状态
git log ------ 查看提交的版本信息
下载项目、切换分支和上传代码
-
克隆项目:
git clone 项目地址(.git)
-
拉去远程分支代码(不太会用)
git pull origin master // 直接覆盖本代代码 git fetch origin master // 还要手动将代码添加到本地
-
切换分支
-
本地有这个分支
git checkout <分支名>
-
本地没有这个分支,要获取远程的某分支
# 方式一: git checkout b <分支名> //是创建并切换到目标分支 git reset --hard origin/chunyan ---用远程分支chunyan的代码完全覆盖当前分支 # 方式二 git pull git branch -a git checkout <分支名> # 方式三 #拉取远程分支 git checkout -b 本地分支 origin <远程分支> #拉取远程分支 git pull origin 远程分支 #建立分支 git branch --set-upstream-to origin/远程分支名 本地分支名 #拉取分支 git pull #遇到本地冲突,先删除本地分支,再重新拉取远程分支 git branch -D 本地分支名称
-
-
上传代码
git push origin <分支名> ---- 将本地分支提交到远程仓库
本地修改代码提交
-
git status ---------可以查看有没有改变没有被跟踪
-
git add filename ----对改变建立跟踪,可以通过
git reset
命令撤销 -
git commit ---------将改变缓存到本地服务区,不可以通过
git reset命令撤销
# 快捷操作 git add . # 添加所有文件 git commit -am '提交描述' # 快速提交所有文件 # 修改提交 git commit -amend '描述文字' # 如果工作目录没有已经追踪的文件(通过git add .追踪),则只会出现如下对话框让你更改提交描述 # 如果工作目录有意境追踪的文件,它会自动将追踪的文件添加到提交目录,并出现下面的对话框让你更改提交描述
-
git push -----上传改变
本地代码的修改、提交和撤销提交
三棵树原理
![请查看-相册-三棵树](assets/image-20200604170438661.png)
-
git add <文件名> -----将沙盒的文件添加到索引
-
git commit -m '描述' ---- 将索引的快照提交
查看本地已经commit但没有push的分支: git cherry -v
# usage: git cherry [-v] [<upstream> [<head> [<limit>]]] git cherry -v origin/master HEAD~1 # upstream代表分支 --有时候可以不要,有时候不要又会报错 # HEAD~1表示提交的最新的一个版本;HEAD~2表示最近提交的两次分支,下面的为最新的
-
git push origin <分支名> ----将本地提交传到远程仓库
注意:上传到远程仓库的代码,不是以每次上传作为一个版本,而是以提交过的记录作为一个版本
-
撤回提交(没有上传到远程服务)
-
reset: 以可预见的方式直接操纵三棵树
git reset --soft HEAD~ # 撤销最近的一次提交,即将最近一次提交退回到索引状态,HEAD指向上一次提交(HEAD~表示父节点) git reset --mixed HEAD~ # 不仅撤销最近一次提交,还会取消暂存区(既索引)所有内容,但工作目录不变 git reset --hard HEAD~ # 撤销最近一次提交,同时删除暂存区和工作目录的所有内容。这是 git reset仅有的一个危险用法 git push origin develop --force (本地分支和远程分支都是 develop) 也可以把 HEAD~ 直接改成你想要退回的版本号
-
-
撤回提交(提交已经上传到远程服务)
git log # 查看提交的版本信息 git revert <commit_id> # 写那次提交的commit_id就撤销那个版本;还是只对本地文件进行修改,要在push origin <upstream>上传撤销的动作
![image-20200601185548152](assets/image-20200601185548152.png)
注意:以上两个撤回操作操作的都是本地仓库,最终要把改变上传到远程仓库才能在远程仓库起效
合并分支
创建三个分支
-
在master分支下创建了一个
master.txt
文件在master分支下创建了一个文件
# 切换到dev分支 git checkout dev # 将 tingting分支的代码合并到dev分支 git merge tingting # 提交修改 git push 直接提交了代码
-
通过
master
分支拉起一个dev
分支,并在dev分支下添加文件dev.txt
。并提交代码到远程仓库从master分支拉去一个dev分支
-
通过
dev
分支拉起一个ssui
分支,并在ssui
分支下添加文件ssui.txt
。并提交代码到远程仓库从dev分支拉去一个ssui分支
更改dev分支的代码,并合并到master分支
-
切换到dev分支,并且修改代码
//master.txt 我在dev分支改了master.txt文件的内容
-
提交dev分支的代码
git commit -a -m '第一次提交dev分支的代码'
-
合并dev分支的代码到master分支
# 切换到master分支 git cehckout master # 在本地将dev分支的代码合并到master git merge dev # 如果没有冲突(因该是不会有冲突),就直接提交代码 git push
修改ssui分支的代码,并合并到master分支上
-
切换到ssui分支,并修改
master.txt
文件如下:// master.txt 我在ssui分支里修改了master分支的代码
-
提交ssui分支的代码
git commit -a -m '第一次提交ssui分支的代码'
-
将ssui分支的代码合并到master分支
# 切换到master分支 git cehckout master # 在本地将dev分支的代码合并到master git merge ssui # 这是就会出现冲突,并且分支的标志会变成 [master|MERGING] # 根据提示修改冲突,然后提交代码 git commit -a -m '合并ssui分支的代码到master分支上' git push
注意:
- 合并代码前,记得先提交一下本地代码
- 当多个分支同时修改了待合并的分支(master)的同一个地方时,在合并时就可能出现冲突。这是就必须解决冲突再提交代码
终止合并
当合并两个分支的代码出现冲突的时候
# 会尝试恢复到进行合并之前的状态。唯一的不好之处在于如果合并之前你的巩固走目录有未暂存、未提交的变更,就会被覆盖。所以在执行合并之前一定要确保你的工作目录是干净的。
git merge --abort
![image-20200519083549105](assets/image-20200519083549105.png)
# 回到之前的某一次状态。这种方式会清楚工作目录里的所有内容,一定要确认自己已经不需要这些变更了,才执行这条命令
git reset --hard HEAD~1
当我将本地文件还原到上两个版本后,再执行操作时就会出现下面的提示,要怎么解决
![image-20200519082708160](assets/image-20200519082708160.png)
用远程分支覆盖本地分支
# 1.我想将test分支上的代码完全覆盖dev分支,首先切换到dev分支
git checkout dev
# 2.然后直接设置代码给远程的test分支上的代码
git reset --hard origin/test
# 3.执行上面的命令后dev分支上的代码就完全被test分支上的代码覆盖了,注意只是本地分支,这时候还需要将本地分支强行推到远程分支。
git push -f