1.Git的优势
Git是一个伟大的版本管理工具,比之svn,具有以下优势:
-
分布式版本控制:Git是一种分布式版本控制系统,每个开发者都拥有自己的完整代码库,不需要依赖网络连接就可以进行版本控制、合并和提交操作。这样可以提高开发效率,并降低了对网络的依赖。
-
速度快:Git的设计目标之一就是速度。相对于SVN,Git在提交、分支、合并和切换等操作上都有更快的响应速度。
-
强大的分支管理:Git的分支管理非常强大,支持轻松创建、合并和删除分支。这使得开发人员能够轻松地进行并行开发,同时保持代码库的稳定性。
然而,Git也没能全面占领svn的市场,因为研发团队的成员不一定都是技术出身,例如策划,测试同学,svn容易上手,换成git根本搞不定。
2.Git的基本概念
首先需要了解下Git的工作区、暂存区、仓库区(本地仓库)、远程仓库的概念
- 工作区:你在电脑里能看到的目录,比如我们的workspace 文件夹就是一个工作区。
- 暂存区:.git目录下的index文件,可以用
git add
命令将工作区的文件添加到暂存区。 - 仓库区(本地仓库):.git目录下的objects文件夹,可以用
git commit
命令将暂存区的内容提交到仓库区。 - 远程仓库:远程服务器上的仓库,可以用
git push
命令将本地仓库的内容推送到远程仓库。
3. Git常用命令
Git虽然也有自己的GUI工具,但除了文件比较比较方便之外,其他还是觉得命令行用得舒服。
3.1从github下载仓库
bash
git clone [https://github.com/kingston-csj/jforgame]
3.2更新远程代码
bash
git pull
3.3添加文件到本地暂存区
bash
// 指定文件
git add pom.xml
// 匹配所有java文件
git add *.java
// 所有文件
git add .
3.4提交文件到本地仓库
bash
git commit -m '牛逼的优化'
3.5推送本地代码到远程仓库
bash
git push
3.6查看本地文件状态
bash
git status
3.7查看本地仓库提交日志
bash
// 查看全部提交记录,按空格下一页
git log
// 查看前几条提交记录
git log -n
3.8查看所有分支
bash
git branch
3.9创建分支
bash
//创建分支不切换
git branch 分支名
//创建分支并切换
git checkout -b 分支名
3.10删除分支
bash
git branch -d 分支名
3.11删除远程分支
bash
git push origin --delete 分支名
3.12合并dev分支合并到master
分支
bash
//切换到master分支
git checkout master
//拉取远程代码
git pull
//合并代码
git merge dev
//推送到master分支
git push origin master
3.13合并部分提交到master分支
bash
git cherry-pick <commitid>
3.14比较文件
bash
git diff xx.java
3.15保存当前的工作进度并清空工作区
bash
git stash
3.16查看保存的工作进度列表
bash
git stash list
3.17将保存的工作进度应用到当前分支
bash
git stash pop
3.18代码还原(从工作区区还原)
bash
// 单个文件
git checkout -- jforgame-demo/src/main/java/jforgame/demo/socket/GameServer.
java
// 模糊匹配
git checkout -- *.java
3.19代码还原(从暂存区还原)
bash
git restore --stage jforgame-demo/src/main/java/jforgame/demo/socket/GameServer.java
3.20代码还原(从仓库还原,本地代码也会清除)
bash
//返回到上一个版本代码
git reset --hard HEAD^
//返回到上上一个版本代码
git reset --hard HEAD^^
//返回到指定版本
git reset --hard commitid
-------------未完待续
4.常见命令的区别
4.1git stash apply与 git stash pop
- git stash apply命令会将保存的工作进度应用到当前分支,但不会删除stash;
- git stash pop命令则会将保存的工作进度应用到当前分支,并且删除stash
4.2git fetch与git pull
-
git fetch:git fetch是将远程仓库的最新代码下载到本地,但并不会自动合并到当前分支。它将更新远程仓库的追踪分支(如origin/master),但不会影响当前分支。这个命令可以让你查看远程分支的更新情况,并进行比较和分析,然后决定是否将更新合并到当前分支。
-
git pull:git pull在执行时会先执行git fetch命令,然后自动将远程分支的更新合并到当前分支。相当于git fetch + git merge。如果当前分支有未提交的修改,git pull会尝试自动合并,如果出现冲突则需要手动解决冲突。因此,git pull更适合在需要快速获取远程更新并合并到当前分支的情况下使用。
4.3git reset --hard与git reset --soft
git reset --hard回退到某个commit,不保留任何修改。这意味着所有未提交的更改和未跟踪的文件都将被永久删除。
git reset --soft回退到某个commit,保留修改。这意味着之前已经添加到暂存区的更改还会保留下来,你可以重新提交这些更改。未跟踪的文件仍然保留在工作目录中。
-------------未完待续
5.常见错误操作
在使用 Git 过程中,有一些常见的错误操作可能会导致代码丢失或者历史记录被修改。以下是一些常见的错误操作
- git commit --amend:如果你在提交代码后发现需要修改提交信息或添加遗漏的文件,可以使用 git commit --amend 命令。然而,如果在执行此命令之前已经进行过推送(push)操作,那么推送会失败,并且需要执行强制推送(force push)操作来修改远程仓库中的历史记录。
- git reset --hard:git reset --hard 命令可以用来重置当前分支的 HEAD 和索引(index)到指定的提交版本,并且会丢弃所有未提交的更改。如果你在工作目录中有未保存的更改,执行此命令将会永久删除这些更改,无法恢复。
- git push --force:正常情况下,Git 会拒绝非快进式的推送操作,以避免覆盖其他人的更改。然而,如果你执行 git push --force 命令,将会强制推送本地分支到远程仓库,即使这可能会覆盖其他人的更改。因此,在执行强制推送操作之前,需要确保与团队成员协商一致。
- git checkout -b:当你在一个分支上使用 git checkout -b <branch> 命令创建新分支时,如果已经有一个同名的分支存在,Git 会自动切换到该分支,而不是创建新分支。这可能会导致你在错误的分支上进行开发。
- git clean -f:git clean -f 命令用于删除工作目录中未跟踪的文件。但是如果你执行此命令时未注意,可能会误删一些重要的文件。因此,在执行此命令之前,需要确保你真的要删除这些文件。
- git checkout <branch>,当你准备切换分支,务必要将工作区的代码先提交。否则,切换之后本地代码将会丢失。或者,先把工作区的代码通过git stash命令缓存起来。
-------------未完待续