Git 工作区、暂存区和版本库
- Working Directory:工作区,就是平时存放项目代码的地方
- Stage/Index:暂存区/缓存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Local repository:版本库或本地仓库,就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote repository:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
工作流程
git的工作流程一般是这样的:
-
在工作目录中添加、修改文件;
-
将需要进行版本管理的文件放入暂存区域;
git add .
-
将暂存区域的文件提交到git仓库。
git commit
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
Git 命令
用户信息
-
查看用户名
git config user.name
-
查看密码
git config user.password
-
查看邮箱
git config user.email
-
查看配置信息
git config --list
-
修改用户名
git config --global user.name "xxxx(新的用户名)"
-
修改密码
git config --global user.password "xxxx(新的密码)"
-
修改邮箱
git config --global user.email "xxxx@xxx.com(新的邮箱)"
-
移除用户名和邮箱
git config --global --replace-all user.name "xxxx(用户名)" git config --global --replace-all uesr.email "xxxx@xxx.com(邮箱)"
git 从master拉取代码创建新分支
以创建一个dev分支为例
-
切换到被copy的分支(master),并且从远端拉取最新版本
git checkout master git pull
-
从当前分支拉copy开发分支
git checkout -b dev
-
把新建的分支push到远端
git push origin dev
-
关联
git branch --set-upstream-to=origin/dev dev
-
再次拉取验证
git pull
git拉取指定分支代码
-
branch_name
就是分支的名称git clone -b [branch_name] XXX
git拉取代码不覆盖本地修改的代码
-
先将本地代码放在暂存区:
git stash
-
将远程GitLab上代码拉取下来:
git pull
-
将1中暂存区的代码放回本地:
git stash pop
如果你有多个stash项,你可以指定要恢复的特定stash项: 1.使用 git stash list 查看所有stash项 2.使用 git stash pop stash@{1} 选择一个特定的stash
注意:若使用报错如下:
error: unknown switch `e’
usage: git stash apply [–index] [-q | --quiet] []
-q, --quiet be quiet, only report errors
–index attempt to recreate the index
这种问题是因为VSCode中,花括号在 powershell 中被认为是代码块执行标识符,若想正常使用,可用反引号 进行转义如下:git stash pop stash@`{0`}
-
接下来继续我们平时的正常上传代码的操作即可
// 1.提交tracked的修改 git commit -m '操作内容' git push // 2.提交untracked的修改 git add . 或者 git add -A git commit -m '操作内容' git push
git pull拉取代码失败
解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
-
保留本地更改,中止合并
git merge --abort
-
重新合并
git reset --merge
-
重新拉取
git pull
git 如何把分支代码合并到master主分支上
-
首先切换到分支;
git checkout feature
-
使用git pull 把分支代码pull下来;
git pull
-
切换到主分支;
git checkout master
-
把分支的代码merge到主分支;
git merge feature
-
git push推上去OK完成,现在自己分支的代码就合并到主分支上了
git push
git将远程分支与本地分支关联
-
origin/remote_branch
是你本地分支对应的远程分支 -
your_branch
是你当前的本地分支git branch --set-upstream-to=origin/[remote_branch] [your_branch]
git 修改commit信息
-
修改最近一次的commit信息
git commit --amend
git 修改分支名称
-
修改本地分支名称
git branch -m [oldBranchName] [newBranchName]
-
将本地分支的远程分支删除
git push --delete origin [oldBranchName]
-
将改名后的本地分支推送到远程,并将本地分支与之关联
git push --set-upstream origin [newBranchName]
git删除本地分支
-
查看所有本地分支
git branch
-
-d是一个标志,是命令的一个选项,它是–delete。 顾名思义,它表示您要删除某些内容。
-
local_branch_name
是要删除的分支的名称。git branch -d [local_branch_name]
注意:
如果分支包含未合并的更改和未推送的提交,则该-d标志将不允许删除本地分支。
这是因为任何其他分支都看不到提交,并且 Git 正在保护您免于意外丢失任何提交数据。如果你尝试这样做,Git 会显示一个错误。如果确定要删,就如报错提示那样,改用-D标志。
-D即-- delete --force 会强行删除本地分支,无论其合并状态如何。
仅当您绝对确定要删除本地分支时才使用它。如果您没有将其合并到另一个本地分支或将其推送到代码库中的远程分支,您将面临丢失所做的任何更改的风险。
git删除远程分支
在删除远程分支时,同名的本地分支并不会被删除。
-
查看所有分支,包括本地分支和远程分支
git branch -a
-
remote_branch_name
是要删除的远程分支的名称git push origin --delete [remote_branch_name]
git清理本地无效分支
- 即清理远程已删除本地没删除的分支
git fetch -p
git 撤销合并
-
git merge后发现冲突太多,或者合并的分支代码并不是最新,想要撤销合并(用来撤销还没commit 的merge)
git reset --hard HEAD
git 撤回已经提交的代码
-
查看所有提交的版本信息
注意:黄色字体中
commit
后面的一串码就是每一个版本号对应的码git log
-
回退到指定版本
注意:–hard 删除工作空间改动代码,撤销commit,撤销git add .
git reset --hard 版本号
reset
是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。 -
推送代码
- -f是一个标志,它是–force。 表示强制更新。
git push origin master -f
git回退到上个版本
-
恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git reset --hard HEAD^
git reset和git revert的区别
- reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除;
而revert仅是撤销指定commit的修改,并不影响后续的commit。 - reset执行后不会产生记录,revert执行后会产生记录。