一、前言
该篇文章主要总结在平时工作中使用 Git 最常见的几种情况。
二、查看变更及历史信息
2.1 查看变更状态
1、显示本地仓库有变更的文件
git status
示例:
远程仓库现有 1.txt
文件,拉取仓库最新的文件后,并创建一个文件,在查看状态:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (develop)
$ git pull
Already up to date.
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (develop)
$ ll
total 0
-rw-r--r-- 1 Administrator 197121 0 Nov 29 13:28 1.txt
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (develop)
$ touch 2.txt
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (develop)
$ git status
On branch develop
Your branch is up to date with 'origin/develop'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
2.txt
nothing added to commit but untracked files present (use "git add" to track)
2.2 查看历史记录
1、查看历史提交记录
git log
git log --oneline 简洁的版本
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (develop)
$ git log --oneline
c4fdd63 (HEAD -> develop, origin/develop) add 2.txt 13.40
93b93f0 add 1.txt
3462cd9 delete four
bf0576c a b txt
9e29d0e rm
90627c2 test
495b54d 2.txt
6708865 test
262d5a5 test
2c1cfc6 test
fdef982 (origin/hotfix, origin/feature) Initial commit
2、查看历史某个文件的提交记录
git blame 文件名
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (develop)
$ git blame 2.txt
00000000 (Not Committed Yet 2022-11-29 13:45:07 +0800 1) 123
00000000 (Not Committed Yet 2022-11-29 13:45:07 +0800 2) 456
三、撤销提交
3.1 撤销工作区的修改
git checkout -- 文件名
3.2 撤销暂存区的提交
git reset HEAD
3.3 撤销已经提交到本地仓库的代码
方法一:不保留本地修改
//向前回退一个版本
git reset --hard HEAD^
//向前回退两个版本,以此类推
git reset --hard HEAD^^
方法二:不保留本地修改
//向前回退一个版本
git reset --hard HEAD~1
//向前回退两个版本,以此类推
git reset --hard HEAD~2
方法三:保留本地修改
//查看上次提交号
git log --oneline
//根据提交号进行撤销
git reset --hard 版本号
其中方法一和方法二不保留本地的修改(多一步 git checkout – 文件名 操作),方法三能够撤销提交并且保留本地的修改。
四、冲突解决
4.1 远程仓库中有新增无修改,没拉取后就推送
初始状态:开发者1 和开发者 2本地以及远程仓库只有 a.txt 和 b.txt 两个文件。
开发者1 | 开发者2 | 时间点 |
---|---|---|
git pull | git pull | 09:01 |
touch c.txt | 09:02 | |
git add . | 09:03 | |
git commit -m ‘add c.txt’ | 09:04 | |
git push | 09:05 | |
vim a.txt | 09:06 | |
git add . | 09:07 | |
git commit -m ‘update a.txt’ | 09:08 | |
git push | 09:09 | |
报错,出现了冲突 | 09:09 | |
git pull | 09:10 | |
git push | 09:11 | |
推送成功 | 09:11 |
总结:当不是本地和远程仓库同一个文件产生冲突,push 之前 使用 git pull 拉取下即可。
4.2 远程仓库中有修改,无新增,改了同一个文件,没拉取后就推送
初始状态:开发者1 和开发者 2本地以及远程仓库只有 a.txt 这个文件。
开发者1 | 开发者2 | 时间点 |
---|---|---|
git pull | git pull | 09:01 |
vim a.txt | 09:02 | |
git add . | 09:03 | |
git commit -m ‘update 1.txt’ | 09:04 | |
git push | 09:05 | |
vim a.txt | 09:06 | |
git add . | 09:07 | |
git commit -m ‘update a.txt’ | 09:08 | |
git push | 09:09 | |
推送报错,出现了冲突 | 09:09 | |
git pull | 09:10 | |
拉取报错,提示出现了冲突 | 09:10 | |
git status | 09:11 | |
手动解决冲突文件(要么是手动合并要么是忽略自己的修改) | 09:12 | |
解决完后,无需重新拉取,将这次修改再次提交 | 09:12 | |
git add . | 09:13 | |
git commit -m ‘solve conflict a.txt’ | 09:14 | |
git push | 09:15 |
提示:git stash,可忽略自己的修改。
五、分支操作
远程仓库默认五个分支:master、release、develop、feature、hotfix
5.1 查看分支
1、查看远程分支
git branch -r
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git branch -r
origin/HEAD -> origin/master
origin/develop
origin/feature
origin/hotfix
origin/master
origin/release
2、查看本地分支
git branch
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git branch
* master
3、查看所有分支列表
git branch -a
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/feature
remotes/origin/hotfix
remotes/origin/master
remotes/origin/release
5.2 创建和切换分支
1、创建新分支
git branch 新分支名称
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git branch mybranch
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git branch -a
* master
mybranch
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/feature
remotes/origin/hotfix
remotes/origin/master
remotes/origin/release
2、切换分支
git checkout 已有分支名称
3、创建分支的同时切换到该分支上
git checkout -b 新分支名称
5.3 从远程仓库pull(拉取)代码到本地分支
1、指定远程分支和本地分支
git pull origin 远程分支名称:本地分支名称
2、如果不写本地分支名称,则默认和远程分支同名
git pull origin 远程分支名称
5.4 将新分支推送到远程仓库
1、如果远程仓库已有该分支
git push origin 分支名称
2、如果远程仓库没有该分支
git push --set-upstream origin 新分支名称
该句命令可以将本地新建的分支上传到远程仓库,使远程仓库有了该分支。
5.5 删除分支
1、删除本地分支(不能删除当前所在分支,如果要删除,必须切换到其它分支上)
git branch -d 分支名称
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git branch -d mybranch
error: The branch 'mybranch' is not fully merged.
If you are sure you want to delete it, run 'git branch -D mybranch'.
删除的时候报错 The branch ‘mybranch’ is not fully merged(未完全合并分支),可使用以下命令:
git branch -D 分支名称
2、删除远程分支
git push origin :远程分支名称
示例:
Administrator@PC-20201224ZYTZ MINGW64 /e/git_test/demo (master)
$ git push origin :mybranch
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:tmqqsir/demo.git
- [deleted] mybranch
5.6 合并分支
1、假设我们在本地分支:newbranch
上
git add .
git commit -m '完成某个功能'
git push -u origin newbranch
2、切换到 master 分支上
git checkout master
3、拉取 master 分支最新代码
git pull origin master
4、将 newbranch
分支合并到 master
分支上
git merge newbranch
如果合并的时候出现冲突,执行以下命令取消合并:
git merge --abort:
然后查看状态解决冲突:
git status
最后一步,push到远程仓库:
git push origin master