前言

工作中有些不常用的指令记不清楚,每次都去查效率太低了。因此开这篇文章记录一下工作中使用git的一些场景,以供快速解决问题。

初始化本地仓库

echo "# interview" >> README.md
git init # 把这个目录变成Git可以管理的仓库
git add README.md # 把文件修改添加到暂存区
git commit -m "first commit" # 把暂存区的所有内容提交到当前本地分支
git branch -M main
git remote add origin https://github.com/Silincee/仓库名.git # 关联远程仓库,origin为远程地址的别名
git push -u origin main # 将本地分支推送到origin主机的main分支

版本管理

版本回退

1)git log/git log --pretty=oneline :查看历史提交。在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) first commit
e475afc93c209a690c39c13a46716e8fa000c366 second commit
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 third commit

2)回退至上一版本

  • –mixed(默认):将指定 commit id 撤回之后所有内容全部放进工作区中。
  • –soft:将指定 commit id 撤回之后所有内容全部放进暂存区。
  • –hard:将指定 commit id 撤回并清空工作目录及暂存区所有修改。
# ⚠️ 如果你从来没有add过,那你的文件没有被git管理。然后通过git reset之后,你整个工作区的所有文件都会回到暂存区的那个状态,那些没有add的文件,其实相当于rm -rf了,永远找不回来。
git reset --hard HEAD^

此时使用git log查看,first commit版本已经不见了。不过可以用git reset --hard 1094a回到未来的某个版本,其中版本号没必要写全,前几位就可以了。如果找不到版本号,可以使用git reflog查看之前的每一次命令:

$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: third commit
e475afc HEAD@{3}: commit: second commit
eaadf4e HEAD@{4}: commit (initial): first commit

撤销修改

1)当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改

# git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
git checkout -- README.txt

命令git checkout -- README.txt意思就是,把README.txt文件在工作区的修改全部撤销,这里有两种情况:

  1. README.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  2. 一种是README.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

2)当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改

# step1:把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD README.txt
# step2: 此时就相当于场景1),只需丢弃工作区的修改即可
git checkout -- README.txt

3)已经提交了不合适的修改到版本库时,想要撤销本次提交,可使用版本回退,不过前提是没有推送到远程库。

git reset --hard HEAD^

分支管理

创建与合并分支

1)创建并切换到新的dev分支

git switch -c dev / git checkout -b dev

2)查看分支列表

git branch

3)合并指定分支到当前分支

git merge dev

4)直接切换到已有的master分支

git switch master / git checkout master

解决冲突

把feature1分支合并到当前分支

git merge feature1

合并前:

image-20220427203243892

合并后:

image-20220427203319266

IDEA中Git的使用

1)新建变更,注意一定要关联需求。创建成功后变更会来到待集成区

image-20210607110407845

2)在本地项目中 checkout 下来新创建的分支

git pull
git checkout other/zhongye_20210607

3)现在就可以在other上继续修改,然后时不时地把other分支push到远程。提交前先把当前最新的master合并到当前分支。

image-20210611140523275

image-20210603221958048

image-20210603222030909

image-20210604182022687

4)commit

image-20210607115439419

5)然后点击加入集成,变更来到集成区,会合并分支到 release_dev_05_26_16_10_13

image-20210604100446175

image-20210604100816215

6)合并和检查版本号是否一致

image-20210604182721978