Git是一种分布式版本控制系统,用于记录一个或若干个文件内容的变化,以便查阅和回溯。
它的工作原理可以概括为以下几点:
工作区(Workspace):这是你在电脑上看到的目录,工作区是你用来修改文件的目录。在工作区中我们对文件进行增删改。
暂存区(Index/Stage):暂存区是位于Git仓库中的一个文件,用于暂时存放提交的更改。我们通过git add
命令将修改的文件放入暂存区。
仓库区(Repository):如果你对暂存区的文件感到满意,可以提交这些修改到仓库区,这样你就成功地创建了一个新的版本。本地仓库是Git用来保存完整项目的整个历史记录的地方。它保存了项目的全部提交历史和版本信息。
远程仓库(Remote):你可以把本地仓库的内容推送到远程仓库,也可以从远程仓库拉取数据到本地。
Git的工作流程如下:
git clone
: 用于将远程仓库的代码克隆到本地。git clone https://github.com/username/repo.git
修改文件:在工作区中对文件进行修改、添加或删除操作。
git add
:将修改的文件添加到暂存区,表示要提交这些更改。
git add . //将当前目录下的所有修改过的文件添加到暂存区(包括新建、删除和修改)。
git add file.txt //提交指定文件
git commit
: 用于将暂存区的文件提交到本地仓库,生成一个新的版本。git commit -m "Commit message" //提交更改并添加相应的提交信息
git push
: 用于将本地仓库的代码中的新版本推送到远程仓库。git push origin master
git pull
: 用于从远程仓库拉取最新的代码到本地并合并git pull origin master
git branch
: 创建、切换、合并和删除分支,实现并行开发和版本控制。git branch //查看当前分支
git branch dev //创建分支
git branch -d dev //删除一个分支
git branch -r //用于列出远程的所有分支。
git checkout
: 用于切换分支或恢复文件git checkout dev //切换到dev分支
git checkout -b dev //创建新分支并切换分支
git checkout file.txt //将工作区的指定文件的内容恢复到暂存区的状态
git merge
: 将不同分支中的代码合并到一起,解决冲突并生成新的提交,首先确保你已经切换到目标分支上,比如主分支或者其他想要接收更改的分支,运行 git merge dev
来合并dev分支到目标分支。Git会自动尝试合并两个分支的修改内容,但有时候会发生冲突,若发现了冲突,打开相关文件查看具体冲突部分,根据需求编辑文件,选择保留哪些变化或者对冲突进行调整。删除特定符号及其周围的注释,然后保存文件。最后提交合并结果,可以使用 git commit -m "合并"
命令来提交。git merge dev
git status
: 用于查看工作区、暂存区的状态。
git log
:查看项目的提交历史,包括作者、时间和提交说明。
git log --graph 以图形化的方式展示提交历史和分支合并情况。
git reset
:撤销提交、回退版本,并恢复文件到之前的状态。git log //首先查看提交记录并获取要回退的目标版本的commit ID(或者只需要最后几位字符)。
git reset <commit_id> //将HEAD指向目标版本,同时保留工作区文件不变。这样会删除所有新的提交记录,但保留修改内容。
git reset --hard <commit_id> //若想完全移除目标版本及其之后的提交记录,可以添加 --hard 参数,注意,此操作会永久性地删除该版本及其之后的更改,谨慎使用。
git diff
: 用于查看文件或分支之间的差异。git diff file.txt
git diff branch1 branch2
git stash
: 用于保存当前的修改,并将工作区还原到上一个提交的状态。git stash
git stash apply
git remote
: 用于管理远程仓库。git remote -v
git remote add origin https://github.com/username/repo.git
git remote show // 用于查看远程仓库的详细信息。
git fetch
: 用于从远程仓库下载最新的代码,但不合并到当前分支。git fetch origin
其他常用指令
git init
初始化本地git仓库(创建新仓库)。
git clone
用于克隆远程的项目到本地。
git rm
: 用于将文件从工作区和暂存区中删除。
git rm file.txt
git rm -r foldername //递归地删除指定文件夹及其所有内容,包括文件和文件夹
git config --global user.name "xxx"
:配置用户名
git config --global user.email "xxx@xxx.com"
:配置邮件
git show dfb55efr4f2f7b573327763e5c0013802e392812
:显示某个提交的详细内容,可以只用commitid的前几位,例如 git show dfb55
。
git show HEAD //显示HEAD提交日志。
git show HEAD^ //显示HEAD的父(上一个版本)的提交日志,`^^`为上两个版本,`^5`为上5个版本。
git tag
:显示已存在的tag。
git tag -a v2.0 -m 'xxx'
:增加v2.0的tag。
git rebase
: 用于将一个分支的提交合并到另一个分支上。
git rebase branch_name