超详细Git解析
目录
git status:通过该命令显示出来的文件总共有三种状态,分别是:
Git 新建分支:
git branch dev-01:新建分支dev-01
git push origin dev-01:将分支dev-01推到远程,远程会自动生成同名新分支dev-01
git branch --set-upstream-to=origin/dev-01:将当前分支与远程分支关联(在den-01分支中执行该命令)
Git 删除分支:
删除远程分支:git push origin --delete <分支名>
删除本地分支:git branch -d <分支名>
Git 解决每次push都要输入用户密码问题:出现上面这种情况 先按提示输入用户名和密码,接着执行 git config --global credential.helper store
Git 撤销
1. 提交之前撤销:
- .添加到暂存区:git add -A (-A表示所有文件添加到暂存区)
git reset HEAD filename :这个命令只是将文件从暂存区中拉下来,并不能回退。如果需要回退 还需要执行 git checkout -- filename
git reset HEAD :一次性将所有文件从暂存区拉下来 + git checkout -- .
- 未添加到暂存区:例如修改了文件test1,没有其他操作
git checkout -- test1 (将没有添加到暂存区的一个文件回滚到所在的分支最新的一次提交)
git checkout -- . 对所有文件撤销
2. 提交之后撤销:
也就是执行了git add -A 和 git commit -m 'xxx' 和 git push origin dev之后的撤销
- 撤销掉这次提交:git revert 版本号:会生成一次新的提交记录(当执行一次revert时再执行一次revert,回退的内容又会生效,相当于没有执行revert,有奇偶特性)
git revert 本次提交版本号 然后再执行 git push origin dev
- 回退到某次提交,该提交以后的提交都回退:(有一定的风险,不可逆,所以少用,尽量使用git revert)
git reset --hard commitId:会将你的提交记录回溯到commitId这一次的提交那里,然后再执行git push origin dev --force
如下图例子:比如我想回溯到1处(保留1处记录),2处所有的提交记录都消失
git reset --hard 672b0 然后前置推送(不推荐,除非有很多文件) git push origin dev --force
git tag
打标签:v0.1版本号
git tag -a v0.1 -m 'xxx':给项目打一个标签 如果需要推送 需要用 git push --tags
文件状态变更
git status:通过该命令显示出来的文件总共有三种状态,分别是:
- 已添加至缓存区,待提交(git add后)
- 已修改,未暂存
- 未追踪状态的文件:一般指新增文件在执行git add test1后当执行git commit -m 'test1'后,test1文件
在执行git add test1后
当执行git commit -m 'test1'后,test1文件
git diff:
1.git diff默认查看没有添加至暂存区的文件
2.git diff --staged 查看暂存区文件内容的修改
如下图‘-’表示删除 ‘+’表示新增
git rebase 与 git merge:
git rebase 与 git merge 都可以进行分支的合并
git merge 合并后会保留两个分支的记录
git rebase 合并后会展示成一个分支的记录,另一个分支的提交实际生成了一个副本
git merge合并
dev 分支 合并到test分支
合并步骤:git fetch origin dev -> git merge dev -> git push origin test (git push origin test --force)
git merge 解决冲突后需要手动通过git add -> git commit 生成一次提交
git merge一次性会解决之前提交记录中所有的冲突
git rebase 合并
dev 分支合并到test分支
合并步骤:git fetch origin dev -> git rebase dev ->git push origin test
git rebase在解决冲突后,会自动生成一次提交。
git rebase一次只会解决一次提交上的冲突,如果多次提交都有冲突,需要执行多次rebase操作。
冲突解决:dev 分支合并到test分支
git merge :
会一次性把所有冲突显示出来,例如有两个文件test1 test2都有冲突,可以都一次性修改这两个文件,会新生成一次提交
步骤:git fetch origin dev -> git merge dev ->修改文件解决冲突 -> git add test1 ->git add test2 -> git commit -m 'config merge dev' -> git push origin test
dev 合并到 test:下图
git rebase:
(dev test分支同时都修改了test1 test2文件)
步骤:git fetch origin dev -> git rebase dev ->修改冲突文件test1 ->git add test1 -> git rebase --continue ->继续修改冲突文件test2 ->git add test2 ->git push origin test
如下图:当执行git rebase dev时,这时候只是先显示出test1的冲突文件git rebase --continue:相当于解决test1文件冲突后继续后续操作 解决test2的冲突