Git常用命令学习
说明:<>
表示占位符的说明,[]
表示可选,/
表示“或”
仓库操作
- 初始化创建一个本地仓库
git init
- 克隆远程仓库至本地
git clone <远程仓库地址> [仓库名称] #可以加上自定义仓库名称
- 配置仓库
git config user.name <用户名> git config user.email <邮箱>
- 等价于在
.git/config
文件中添加:
[user] name = zcongfly email = zcongflying@qq.com
- 如果向对所有仓库进行全局配置
git --global config user.name <用户名> git --global config user.email <邮箱>
- 此时修改的则是C盘下的用户根目录的
.gitconfig
文件。
文件操作
- 查看文件暂存区状态
git status
# 1.当前文件夹(工作区)中没有任何文件 On branch master #在master分支 No commits yet #目前没有提交状态 nothing to commit (create/copy files and use "git add" to track) #没有文件可供提交 # 2.当前文件夹(工作区)中有文件但是还没有添加进暂存区,会显示这样的信息 On branch master No commits yet Untracked files: #存在一个未追踪文件a.txt (use "git add <file>..." to include in what will be committed) a.txt nothing added to commit but untracked files present (use "git add" to track) #没有文件被提交但是有一个未追踪的文件 # 3.当前文件夹(工作区)中有文件且已经被添加进暂存区中 On branch master No commits yet Changes to be committed: #有文件可供提交至存储区 (use "git rm --cached <file>..." to unstage) new file: a.txt # 4.当前文件夹(工作区)已执行过一次或以上的提交命令,目前没有文件 On branch master nothing to commit, working tree clean
- 添加工作区文件至暂存区中
git add <文件名>/-A # -A表示将工作区中的所有文件添加到暂存区中
- 注意,这里的文件名支持用通配符,如
*.txt
可以代表所有以txt
结尾的文件,其余涉及到文件名的参数通常都支持通配符。 - 将暂存区的文件移动回工作区
git rm --cached <文件名>
- 将暂存区的文件提交至存储区
git commit -m `<提交说明信息>`
- 这里的
-m
表示message,指描述信息。 - 查看历史提交记录
git log [--oneline] # 加上--oneline表示只用一行显示日志信息,此时会省略掉作者和日期
commit 5b29c03e7def3e9f404d0572eef772ea7f3ce955 Author:lihaibo <15811009164@163.com> (HEAD -> master) Date:Wed Mar 29 10:35:31 2023 +0800 第二次新增文件 commit bdb56b85f63449b1b&4f1b0bec5621b6126b140d Author:lihaibo <15811009164@163.com> Date:Wed Mar 29 10:32:16 2023 +0800 第一次新增文件
# 加上--oneline的输出结果 5b29c03 (HEAD -> master) 第二次新增文件 bdb56b8 第一次新增文件
- 误删除当前文件夹(工作区)中的文件,如果向找回误删除的文件,需要从存储区恢复误删除的文件到暂存区(只是删除了工作区中的文件,未影响到存储区的文件)
git restore <文件名>
- 注意,这种做法只有当执行删除操作尚未执行提交操作时,可以恢复误删除的文件,如果执行力提交操作则恢复不了。
- 退回上一版本
如果误操作了文件并且已执行提交操作,可通过退回上一版本撤销操作
git log --oneline # 查看提交日志
5b29c03 (HEAD -> master) 第二次新增文件 bdb56b8 第一次新增文件
git reset --hard bdb56b8
HEAD is now at bdb56b8 第一次新增文件
git log --oneline # 查看提交日志
bdb56b8 (HEAD -> master) 第一次新增文件
- 恢复版本
reset
操作退回了上一版本,但同时也丢弃了当前版本的操作记录。如果既希望能恢复误操作的文件,又希望保留当前版本的操作该如何操作?
git revert <版本号> # 如果想退回bdb56b8版本但同时希望保留5b29c03版本,填5b29c03
[master 5b29c03] Revert "第二次新增文件" 1 file changed, O insertions(+), 0 deletions(-) create mode 100644 a. txt
git log --oneline
d7583ak (HEAD -> master) Revert "第二次新增文件" 5b29c03 第二次新增文件 bdb56b8 第一次新增文件
- 实际上,恢复版本相当于重新执行了一次新的提交操作。
分支操作
- 创建分支
git branch <分支名称>
- 注意,git中的分支时基于提交操作的,得先有提交操作再创建分支。
- 查看当前分支
git branch -v
* master af42a21 aaaa # 前面有*的表示当前分支 user af42a21 aaaa
git checkout user
- 创建并切换分支
git checkout -b order
git branch -d user
- 合并和冲突
合并两个分支,需要先切换到master分支,再把其他分支合并到master。当两个分支中存在同名文件时,会发生文件冲突,需要人工进行处理。
master分支有a.txt、c.txt两个文件,order分支有b.txt、c.txt两个文件,其中c.txt的文件内容不相同。
git checkout master git merge order
Auto-merging c.txt CONFLICT (add/add): Merge conflict in c.txt Automatic merge failed; fix conflicts and then commit the result.
- 此时,分支变为
master|MERGING
,表示正在合并,点开c.txt文件,可以看到两个同名文件的内容被整合到一个c.txt文件里并被标注了内容来源:
<<<<<<< HEAD cccc #原master分支中c.txt文件的内容 ======= 3333 #原order分支中c.txt文件的内容 >>>>>>> order
- 将原有内容清空,替换成c.txt文件想要保留的内容,重新add和commit该文件:
git add c.txt git commit -m cc33
- 提交成功后,可以发现分支由
master|MERGING
变回了master
。
标签操作
- 添加标签(别名)
git log
命令可以查看所有历史版本的提交操作,git log <版本号>
可以查看特定版本号的提交操作:
git log
commit e392852bb03f543d29fa5d302c8fe530c48ae599 Author: zcongfly <zcongflying@qq.com> Date: Mon Jul 3 09:07:55 2023 +0800 bbbb commit af42a2165d21d09be8e3c6b5d82fe586ac40444d Author: zcongfly <zcongflying@qq.com> Date: Mon Jul 3 09:00:29 2023 +0800 aaaa
git log af42a2165d21d09be8e3c6b5d82fe586ac40444d
commit af42a2165d21d09be8e3c6b5d82fe586ac40444d Author: zcongfly <zcongflying@qq.com> Date: Mon Jul 3 09:00:29 2023 +0800 aaaa
- 但是,版本号太长了,不好记而且让人不明所以,因此可以给每一步提交操作产生的版本起一个别名,即打上一个标签,这样,便可以通过别名访问到特定的版本。
git tag <标签名> <版本号> git log <标签名> #等价于git log <版本号>
git tag uptafile af42a2165d21d09be8e3c6b5d82fe586ac40444d git log --oneline
e392852 bbbb af42a21 (tag: uptafile) aaaa
- 删除标签
git tag -d <标签名>
- 除了用于标记每一步提交操作产生的版本的别名外,标签还可以直接被拿来创建分支,意为“对每一步操作创建一个分支”。
git checkout -b <要新建分支的名称> <标签名>
git checkout -b abranch uptafile git log
commit af42a2165d21d09be8e3c6b5d82fe586ac40444d (HEAD -> abranch, tag: uptafile) Author: zcongfly <zcongflying@qq.com> Date: Mon Jul 3 09:00:29 2023 +0800 aaaa
远程仓库
从GitHub或Gitee等远程仓库克隆到二八年底的仓库本身跟远程仓库就有关联,可以从.git/config
文件中查看具体情况:
[remote "origin"] url = git@gitee.com:zcongfly/git_test.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
使用过程中,可以使用名称origin
代替url
,url
为克隆时从远程仓库中拷贝下来的地址,可以是https地址、ssh地址或者其他地址。
- 查看本地仓库关联的远程仓库
git remote -v
- 关联本地仓库与远程仓库
如果本地仓库没有与远程仓库建立关联,可以通过如下命令进行关联
git remote add <要关联的远程仓库的名称> <远程仓库地址>
git remote add origin git@gitee.com:zcongfly/git_test.git
- 执行上面的命令后,
.git/config
文件中会被添加类似的配置信息。 - 删除本地仓库与远程仓库的关联
git remote remove <远程仓库的名称>
- 重命名远程仓库的名称
git remote rename <新的远程仓库的名称>
- 本地仓库的更新内容推送到远程仓库
git push <远程仓库的名称或url>
- 拉取远程仓库的更新内容
git pull <远程仓库的名称或url>