Git基本常用命令及总结
一、创建版本库
git init
git config --global user.name '用户名'
git config --global user.email '邮箱地址'
二、工作区和暂存区
Git控制系统分为工作区和暂存区两个概念。工作区就是此次项目创建的本地文件夹,在项目中使用 git 命令创建版本库之后,工作区会生成一个 .git 的文件夹,里面存放了很多东西,其中最重要的就是称为 stage 的暂存区,还有Git为我们自动创建的第一个分支 master ,以及指向 master 的一个指针叫HEAD 。
我们把文件往Git版本库里添加的时候,是分两步执行的:
? 第一步:使用 git add 命令将文件修改添加到暂存区;
? 第二步:使用 git commit 命令将暂存区的所有内容提交到当前分支。
三、添加和提交文件
git add readme.txt
git add .
git commit -m '提交时的备注'
四、撤销修改
git status
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: readme.txt
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: readme.txt
git checkout -- readme.txt
或
git restore readme.txt (新版本Git,建议使用)
git reset HEAD readme.txt
或
git restore --staged readme.txt(新版本Git,建议使用)
五、删除文件
rm -f readme.txt
git add readme.txt
或
git rm readme.txt
git commit -m '删除readme.txt文件'
git restore 文件名
git restore --staged 文件名
六、版本回退
git log
$ git log
commit 45655a0a6041eaf6190f6c279b81096f9bef04f9 (HEAD -> master)
Author: 别回头丶 <312885991@qq.com>
Date: Wed Jan 12 14:02:12 2022 +0800
第二次提交
commit 121d79b208a791180b621cc14da33c32c6ef0244
Author: 别回头丶 <312885991@qq.com>
Date: Wed Jan 12 13:15:11 2022 +0800
第一次提交
git log --graph
$ git log --graph
* commit 45655a0a6041eaf6190f6c279b81096f9bef04f9 (HEAD -> master)
| Author: 别回头丶 <312885991@qq.com>
| Date: Wed Jan 12 14:02:12 2022 +0800
|
| 第二次提交
|
* commit 121d79b208a791180b621cc14da33c32c6ef0244
| Author: 别回头丶 <312885991@qq.com>
| Date: Wed Jan 12 13:15:11 2022 +0800
|
| 第一次提交
git reflog
$ git reflog
45655a0 (HEAD -> master) HEAD@{0}: commit: 第二次提交
121d79b HEAD@{1}: commit (initial): 第一次提交
git reset --hard 指定的版本(使用HEAD或者版本ID)
git reset --hard HEAD^
git reset --hard 45655a0
七、远程仓库
git remote add origin https://gitee.com/LLS312885991/test.git
git push
git push origin master
git push origin dev
git push -u origin master
git pull
git remote -v
$ git remote -v
origin https://gitee.com/LLS312885991/test.git (fetch)
origin https://gitee.com/LLS312885991/test.git (push)
git remote rm origin
git clone https://gitee.com/LLS312885991/test.git
八、分支管理
分支的作用非常强大,它使得多人工作开发时,每个人都有自己独立的开发空间,互不干扰。一般多人开发时,每个人都会先创建属于自己的分支,然后进行开发,待开发完成后,再合并到主分支上,最后再删除自己的分支即可。
git branch 分支名称
git branch dev
git branch
$ git branch
dev
* master
git switch dev
$ git switch dev
Switched to branch 'dev'
git switch -c dev
$ git switch -c dev
Switched to a new branch 'dev'
git merge dev
git branch -d dev
$ git merge dev
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat a.txt
<<<<<<< HEAD
hello world! liulusheng
=======
hello world! dev
>>>>>>> dev
$ vim a.txt
hello world! liulusheng
$ git add a.txt
$ git commit -m '合并冲突'
[master ceeba28] 合并冲突
git log --graph
$ git log --graph
* commit ceeba28f86befa755d72d61155e3a4bb95d04bb3 (HEAD -> master, origin/master)
|\ Merge: f74d466 6aaee45
| | Author: 别回头丶 <312885991@qq.com>
| | Date: Wed Jan 12 18:29:17 2022 +0800
| |
| | 合并冲突
| |
| * commit 6aaee45e1e0838a0f8b9a1d0ab368dddf030e41e (dev)
| | Author: 别回头丶 <312885991@qq.com>
| | Date: Wed Jan 12 18:22:19 2022 +0800
| |
| | dev分支上修改a.txt
| |
* | commit f74d4662153a4a665e638352df528c3c9cb3bdbd
|/ Author: 别回头丶 <312885991@qq.com>
| Date: Wed Jan 12 18:21:49 2022 +0800
|
| master分支上修改a.txt
|
注意:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。而解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
九、BUG分支
软件开发中,BUG 就像家常便饭一样。有了 BUG 就需要修复,而在Git中,由于分支是如此的强大,所以,每个 BUG 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
但当你接到一个修复一个代号101的 BUG 任务时,很自然地,你想创建一个分支issue-101 来修复它,但是,等等,当前正在 dev 上进行的工作还没有提交,并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该 BUG ,怎么办?
幸好,Git 还提供了一个stash 功能,可以把当前工作现场“储藏”起来,等解决完BUG后,再恢复现场继续工作。
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: b.txt
git stash
$ git status
On branch master
nothing to commit, working tree clean
git stash list
$ git stash list
stash@{0}: WIP on master: 76f2c95 合并冲突
stash@{1}: WIP on master: 76f2c95 合并冲突
git stash apply (恢复现场,但恢复后,stash的内容不会删除,需要手动删除)
$ git stash apply
On branch dev
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: b.txt
git stash pop (恢复现场,并且会删除对应的stash内容)
$ git stash pop
On branch dev
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: b.txt
Dropped refs/stash@{0} (f89d3263c666988318456ba3a0676213920af788)
git stash apply stash@{1}
git stash drop
git stash drop stash@{1}
十、标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。标签 实际上就是对应某一个 commit id ,可以理解 标签和版本号 等价于 域名和IP 的关系。
git tag 标签名称
git tag v1.0
git tag 标签名称 提交ID
git tag v2.0 45655a0
git tag -a 标签名称 -m 说明信息
git tag
git show 标签名称
git show v1.0
git tag -d 标签名称
git tag -d v1.0
git push origin 标签名称
git push origin v1.0
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/LLS312885991/test.git
* [new tag] v1.0 -> v1.0
git push origin --tags
git tag -d v1.0
git push origin :refs/tags/v1.0
|