代码仓库

创建仓库

1.进入需要创建代码库的文件夹

1
cd 文件路径

2.创建/切始化仓库

1
git init

3.关联远程仓库

1
git remote add origin 远程仓库URL

拉取远程仓库到本地

或者直接克隆远程的仓库,更简单方便。

1
git clone <远程仓库URL>

添加文件到仓库

1.查看工作区状态

1
git status

2.添加文件到暂存区

添加单个文件:

1
git add 文件名

添加所有文件:

1
git add .

会忽略的文件:.gitignore中指定的文件会被忽路、空目录

3.提交到本地仓库

1
2
3
4
5
git commit

#我的电脑是Windows,此时进入了一个文本编辑器(vim)
#使用CTRL+C,输入i,进入插入模式
#使用CTRL+C,输入:wq,保存退出

也可以使用git commit -m "commit message",建议提交遵循commit message规范。

使用git commit -m "commit message"的方式提交代码虽然快捷,但是有一些潜在的问题:

  1. 提交信息可能过于简单:使用-m参数,你可能会倾向于写一些简短的提交信息,这可能会导致提交信息缺乏必要的详细内容,使得其他开发者难以理解这次提交的目的和内容。
  2. 无法处理复杂的提交信息:如果你的提交信息需要多行,或者需要更复杂的格式(比如列表、引用等),那么-m参数就无法满足需求了。
  3. 可能会忽略未跟踪的文件git commit -m只会提交已经被添加到暂存区的文件,如果有新的文件被修改但是还没有被添加到暂存区,那么这些文件就不会被提交。

4.对比工作区文件变化

1
git diff 

建议将beyond compare配置为diff工具,用于diff以及merge冲突

仓库配置

1.配置全局用户名和邮箱

1
2
git config --global user.name "name"
git config --global user.email "email address"

若是个人开发机可以这样配置,若是公共编译机则不能这样配置。

2.配当前仓库用户名和邮箱

1
2
git config user.name "name"
git config user.email "email address"

3.查看Git全局配置

1
git config --global -l

代码版本/提交切换

注意:这里的版本均为本地仓库版本。

查看过去版本/提交

1.提交的详情

1
git log 

2.提交的简介

1
git log --pretty=oneline

回退版本/提交

1.回退到当前最新提交

1
git reset --hard HEAD

2.回退到上次提交

1
git reset --hard HEAD^

3.回退到上n次提交

1
git reset --hard HEAD~n

4.回退到某次提交

1
2
git reset --hard commit_id
# 可通过git log获取id

重返未来版本

1.查看历史提交以及被回退的提交

1
git reflog

注意:该记录有时限,且只在本地

2.回到未来版本

1
git reset --hard commit_id

撤销修改

1.工作区文件撤销

如果文件没有被提交到暂存区(即没有执行 git add 命令),你可以使用 git checkout 文件名 来撤销对该文件的修改。

1
git checkout 文件名

2.暂存区文件撤销

如果你想将暂存区的文件撤销到工作区,你可以使用 git reset HEAD 文件名 命令。这个命令不带 --hard 参数,所以它只会将暂存区的文件撤销到工作区,而不会影响工作区的文件。

1
git reset HEAD 文件名

如果你想撤销暂存区的文件,你可以使用 git checkout 文件名 命令。这将会撤销你对该文件的所有修改。

1
git checkout 文件名

3.提交到了版本库

参见回退版本/提交

删除文件

1.从版本库删文件

1
git rm 文件名

修改后需要提交

2.恢复删除

参考撤销修改

3.从版本库中删除文件,但是本地不删除该文件

1
git rm --cached 文件名

暂存修改

参照分支-暂存修改

忽略文件

通过git仓库下的.gitignore文件屏蔽某些中间文件/生成文件

分支

创建与合并分支

1.创建分支

仅创建:

1
git branch 分支名

创建并切换:

1
git checkout -b 分支名

在本地仓库操作,创建的都是本地分支。

2.切换分支

1
git checkout 分支名

3.合并分支

合并某分支到当前分支:

1
git merge <要合并的分支>

禁用 Fast-forward 模式:

1
git merge --no-ff

变基:

用于重新应用一系列提交到另一个分支上。

1
git rebase <要提取提交的分支>

4.删除分支

删除本地分支

删除未合并分支:

1
git branch -D 分支名

删除已合并分支:

1
git branch -d 分支名

删除远程分支

1
git push origin -d 分支名

也可以在界面操作。

5.查看分支

查看当前分支:

1
git branch

查看所有分支消息:

1
git branch -a

例如:

1
2
* master
remotes/origin/master

6.合并分支,解决分支冲突

  1. 将要合并的分支更新到最新

  2. 切换到主分支

  3. 合并分支

  4. 解决合并时的conflict

  5. 提交到版本库

  6. 合并成功

  7. 查看分支状态

    1
    2
    git log --graph
    git log --graph --pretty=oneline --abbrev-commit

7.开发完需要提交PR/MR

通过PR/MR来合并开发分支与主分支。

暂存修改

1.暂存工作现场

1
git stash

2.恢复工作现场

恢复

1
git stash apply

删除

1
git stash drop

恢复+删除

1
git stash pop

多人协作

1.查看远程库信息

1
2
3
4
5
#详细
git remote -v

#不详细
git remote

2.更新/推送远程库

更新远程库信息

1
git fetch

将远程库最新修改更新到本地

1
2
3
4
git pull

#或
git fetch + git merge

将本地修改推送到远程仓库

1
2
3
git push

git push origin 分支名

3.本地分支与远程分支交互

使用远程分支A创建本地分支

1
2
git checkout -b A origin/A 
#origin是远程仓库名,若名字一样origin/A可以省略

将本地分支与远程分支作关联

1
2
3
4
5
git branch --set-upstream-to=origin/remote_branch  your_branch

#或
git checkout your_branch
git branch -u origin/remote_branch

代码版本tag

1.查看tag

本地tag

1
git tag -l

远程tag

1
git ls-remote --tags origin

2.操作tag

添加tag

给当前版本加tag

1
git tag -a 标签名 -m "这是备注信息"

给历史版本加tag

1
git tag -a 标签名 commit_id -m "这是备注信息"

删除tag

删除本地标签

1
git tag -d <tag_name>

删除远程标签

1
git push origin :refs/tags/<tag_name>

推送tag到远程仓库

1
2
3
4
git push origin <tag_name>

#推送所有未提交的tag
git push origin --tags

更新到本地

1
git pull origin --tags

其他生僻命令

查看代码历史记录

1
git blame <file_name>

查找引入 bug 的提交

这个命令可以通过自动搜索的方式来查找引入 bug 的提交。利用二分查找法,自动检查每个提交是否引入了 bug。

1
2
3
4
git bisect start
git bisect bad # 当前版本是有bug的
git bisect good v1.0 # v1.0 版本没有 bug
git bisect reset

复制提交到当前分支

将指定的提交应用到当前分支。常用于将其他分支的提交复制到当前分支。

1
git cherry-pick <commit-id>

查看命令

1
2
3
4
5
#常用命令
git help

#所有命令
git help -a