Git
- 说明:繁琐的配置我就省去了。这里主要记录一些高频操作。
- git clone 从远程仓库克隆:
git clone +远程仓库地址
工作目录、暂存区以及版本库概念
版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等。
工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码。
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方。
本地仓库操作
-
.gitignore配置忽略提交 -
git status查看文件状态,git status –s使输出信息更加简洁 -
git add将未跟踪的文件加入暂存区git add [file1][file2]...git add [dir]git add .
-
git reset将暂存区的文件取消暂存 -
git commit将暂存区的文件修改提交到本地仓库git commit -m "详细信息",详细信息要求颗粒度小,使用专业开发术语1 file changed:1个文件被改动。0 insertions:没有新增内容变化。0 deletions:没有删除内容变化。
-
git rm删除文件- 上面删除的只是工作区的文件,需要提交到本地仓库
-
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 $ git remote -v origin + URL (fetch) origin + URL (push) $ git remote show origin * remote origin Fetch URL: Push URL: HEAD branch: main 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) -
git remote add添加远程仓库运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写
$ git remote add origin2 + 仓库地址 /*查看*/ $ git remote -v origin 仓库地址(fetch) origin 仓库地址 (push) origin2 仓库地址 (fetch) origin2 仓库地址 (push) -
git clone + URL从远程仓库克隆 -
git remote rm移除无效的远程仓库此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库
$ git remote add origin2 + 仓库地址 /*查看*/ $ git remote -v origin 仓库地址(fetch) origin 仓库地址 (push) origin2 仓库地址 (fetch) origin2 仓库地址 (push) /*删除*/ $ git remote rm origin2 /*查看*/ $ git remote -v origin 仓库地址(fetch) origin 仓库地址(push) -
git fetch从远程仓库中抓取与拉取git fetch是从远程仓库获取最新版本到本地仓库,不会自动merge$ git fetch origin main 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. -
git pull是从远程仓库获取最新版本并merge到本地仓库。修改远程仓库的文件,然后git pull。$ git pull origin master 1 file changed, 1 insertion(+), 4 deletions(-)注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数–allow-unrelated-histories
-
git push [remote-name] [branch-name]推送到远程仓库
git分支
-
git branch查看分支# 列出所有本地分支 $ git branch # 列出所有远程分支 $ git branch -r # 列出所有本地分支和远程分支 $ git branch -a -
git branch [branch name]创建分支$ git branch dev $ git branch dev * main -
git checkout切换分支下载远程分支为本地分支: git checkout -b
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令: git branch dev git checkout dev -
git push推送至远程仓库分支
git merge 合并分支
-
git merge命令用于合并指定分支到当前分支。 -
git branch -d [branch name]删除分支如果要删除远程仓库的分支,可以使用git push origin -d branch
-
领先的分支合并
在创建了dev新分支后,main分支没有再进行过commit,而新的分支在main第一次commit的基础上进行了第二次commit。这时候我们称dev分支与main分支相比是领先(ahead) 的,所以在merge的时候直接保留了dev分支上也就是第二次commit的数据。
-
并行的分支合并
当修改了同一个文件的同一个位置时,往往在合并时会报错,提示在合并的时候出现了冲突,需要我们手动解决。报错内容如下:
Auto-merging demo.java CONFLICT (content): Merge conflict in demo.java Automatic merge failed; fix conflicts and then commit the result.这时候我们打开demo.java 文件,可以发现Git工具帮我们把merge时冲突的内容用一些分隔符号分割出来了。这时候手动修改文件的内容来达到你想要的样子。这里我删掉dev分支下的修改,只留下main中修改的内容。修改完成后保存文件,回到Git中输入下面的指令提示Git你已经手动合并完成:
git commit -a此时会弹出一大堆五颜六色的东西,这个是提示你往里面输入你手动merge的时候是怎么样修改的。 但是我们这里可以不管,直接按Esc键后用英文输入法输入冒号再输入wq两个字符,回车即可完成conflict的手动merge。