本地仓库操作
git status 查看文件状态
也可以使用git status –s
使输出信息更加简洁
git add 将未跟踪的文件加入暂存区
添加一个或多个文件到暂存区:
git add [file1][file2]...
添加指定目录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件到暂存区:
git add .
将新创建的文件加入暂存区后查看文件状态
git reset 将暂存区的文件取消暂存
将文件取消暂存后查看文件状态
git commit 将暂存区的文件修改提交到本地仓库
用命令git commit告诉 Git,把文件提交到仓库 ,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
- 1 file changed:1个文件被改动(我们新添加的helloWorld.txt文件)
- 0 insertions:没有新增内容变化。
- 0 deletions:没有删除内容变化。
git rm 删除文件
删除文件后查看文件状态
上面删除的只是工作区的文件,需要提交到本地仓库
将文件添加至忽略列表
.gitignore 配置忽略提交
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
我日常SpringBoot项目配置如下:
*.iml
.idea/
**/target/
*/src/main/webapp/
logs
*.class
git log 查看日志记录
git log
命令显示从最近的提交日志, 如果嫌输出信息太多,可以试试加上--pretty=oneline
参数。
git fetch 强制拉取
git fetch --all
git reset --hard origin/branch-name
git pull
git revert 本地回滚然后提交
指定回退某个提交
git revert -n <commitId>
你回退到了某个版本,然后后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
Git 提供了一个命令git reflog
用来记录你的每一次命令,当你用git reset --hard HEAD^回退到wrote a readme file版本时,再想恢复到add distributed,就可以通过git reflog命令找到add distributed的commit id。
git 中关于撤销以及删除文件的不同场景
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作
- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以用命令git reset --hard commit_id,不过前提是没有推送到远程库
远程仓库操作
前面执行的命令操作都是针对的本地仓库,接下来我们学习关于远程仓库的一些操作,具体包括:
git remote 查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出指定的每一个远程服务器的简写。 如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字
$ git remote
origin
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin https://gitee.com/helloMrZhan/gitCreateTest.git (push)
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote show origin
* remote origin
Fetch URL: https://gitee.com/helloMrZhan/gitCreateTest.git
Push URL: https://gitee.com/helloMrZhan/gitCreateTest.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
git remote add 添加远程仓库
运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写
$ git remote add origin2 https://gitee.com/helloMrZhan/gitCreateTest.git
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin https://gitee.com/helloMrZhan/gitCreateTest.git (push)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (push)
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
git clone 从远程仓库克隆
如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
克隆仓库的命令格式是 git clone [url]
$ git clone https://gitee.com/helloMrZhan/gitCreateTest.git
Cloning into 'gitCreateTest'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e
git remote rm 移除无效的远程仓库
如果因为一些原因想要移除一个远程仓库 ,可以使用 git remote rm
$ git remote add origin2 https://gitee.com/helloMrZhan/gitCreateTest.git
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin https://gitee.com/helloMrZhan/gitCreateTest.git (push)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin2 https://gitee.com/helloMrZhan/gitCreateTest.git (push)
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote rm origin2
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git remote -v
origin https://gitee.com/helloMrZhan/gitCreateTest.git (fetch)
origin https://gitee.com/helloMrZhan/gitCreateTest.git (push)
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库
git fetch 从远程仓库中抓取与拉取
git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge
$ git fetch origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://gitee.com/helloMrZhan/gitCreateTest
* branch master -> FETCH_HEAD
55acabe..509598c master -> origin/master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
git pull 是从远程仓库获取最新版本并merge到本地仓库
修改远程仓库的文件,然后git pull
$ git pull origin master
From https://gitee.com/helloMrZhan/gitCreateTest
* branch master -> FETCH_HEAD
Updating 55acabe..509598c
Fast-forward
README.md | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数--allow-unrelated-histories
git push 推送到远程仓库
当你想分享你的代码时,可以将其推送到远程仓库。 命令形式:git push [remote-name] [branch-name]
$ git add .
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git commit -m "add hello.txt" hello.txt
[master 0b2584f] add hello.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hello.txt
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git push origin master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 255 bytes | 127.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/helloMrZhan/gitCreateTest.git
509598c..0b2584f master -> master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
Git分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git 的master分支并不是一个特殊分支。 它跟其它分支没有区别。 之所以几乎每一个仓库都有 master 分支,是因为git init 命令默认创建它,并且大多数人都懒得去改动它。
git branch 查看分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
$ git branch
* master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch -r
origin/master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch -a
* master
remotes/origin/master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
git branch [branch name] 创建分支
$ git branch dev
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch
dev
* master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
git checkout 切换分支
- 下载远程分支为本地分支:
git checkout -b <localName> <branch-name>
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
$ git checkout dev
Switched to branch 'dev'
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (dev)
$ git branch
* dev
master
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (dev)
git push 推送至远程仓库分支
$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.0]
remote: Create a pull request for 'dev' on Gitee by visiting:
remote: https://gitee.com/helloMrZhan/gitCreateTest/pull/new/helloMrZhan:dev...helloMrZhan:master
To https://gitee.com/helloMrZhan/gitCreateTest.git
* [new branch] dev -> dev
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (dev)
git merge 合并分支
git merge
命令用于合并指定分支到当前分支。
注意到上面的Fast-forward信息,Git 告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
当然,也不是每次合并都能Fast-forward。Fast forward模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git 就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。这时候我们需要使用--no-ff
方式的git merge:
首先,仍然创建并切换dev分支:
git switch -c dev
修改readme.txt文件,并提交一个新的commit:
git add readme.txt
git commit -m "add merge"
我们切换回master:
git switch master
准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:
git merge --no-ff -m "merge with no-ff" dev
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* fc76cf7 (HEAD -> master) merge with no-ff
|\
| * f52c633 (dev) add merge
|/
* cf810e4 conflict fixed
可以看到,不使用Fast forward模式,merge后就像这样:
有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决
git branch -d [branch name] 删除分支
$ git branch -d dev
Deleted branch dev (was b6e4da9).
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)
$ git branch
* master
如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D
注:如果要删除远程仓库中的分支,可以使用命令git push origin –d branchName
$ git push origin -d dev
remote: Powered by GITEE.COM [GNK-6.0]
To https://gitee.com/helloMrZhan/gitCreateTest.git
- [deleted] dev
Administrator@ZCSAFTIYOEUBDJQ MINGW64 /e/gitCreateTest (master)