Git简要笔记
安装
Windows安装
Ubuntu安装
1
sudo apt install git -y
简易使用
版本相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24初始化版本
git init # 里面生成一个.git文件夹,里面内容不要动
更新修改到缓存区
git add 文件名
提交修改
git commit -m "版本修改提示信息"
查看版本历史
git log
git log --pretty=oneline # 参数用于提高阅读
查看历史所有命令
git reflog
回退版本到上一个
git reset --hard HEAD^
git reset --hard HEAD~n # 回退到前n个版本
git reset --hard 指定得版本号
git是先将修改提交到git得暂存区中,等待用户提交后再将修改提交到远程分支中
查看版本库得状态
git status文件修改
1
2
3
4
5
6
7
8
9
10
11
12
13
14撤销【工作区】文件修改(前提:文件修改未提交到远程仓库)
自修改后还没有被放到暂存区,执行撤销修改就回到和版本库一模一样的状态;
修改已经添加到暂存区后,又作了修改,此时执行撤销修改就回到添加到暂存区后的状态。
git checkout -- 文件名称
撤销【缓存区】文件修改(前提:文件修改未提交到远程仓库,仅提交到缓存区)
git reset HEAD 文件名称
查看工作区与最新版本中文件的区别
git diff HEAD -- [文件名]
删除版本库文件
git rm 文件名
git commit -m "删除文件的描述信息"远程仓库(github)
本地执行如下命令,在用户home目录下的.ssh文件夹中生成id_rsa.pub公钥文件
1
ssh-keygen -t rsa -C "2467827751@qq.com"
进入github账户:【setting】–>【SSH and GPG key】,将id_rsa.pub文件内容添加到ssh中
进入github创建新仓库:【new repository】–>输入【Repository name】–>【Create repository】
在本地git仓库执行如下命令关联github对应的仓库
1
2
3执行该命令是将本地仓与github仓库进行关联
origin给远程仓库起的别名,之后同步只需要用origin就可以了
git remote add origin git@github.com:[自己的github用户名]/[项目名].git提交本地仓库到github中
1
2
3
4
5分支指提交到仓库的版本,一般为master; origin是第四步设定的远程仓库的别名
git push -u origin master
第一次提交需要加-u,表示将本地的master和远程仓库的master关联起来,之后提交就不需要要
git push origin master将github上的仓库clone到本地
1
git clone git@github.com:[giuthub用户名]/[项目名].git
分支管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32创建分支并切换至分支内部
方式1:git checkout -b [分支名称] # 不推荐
方式2:git switch -c [分支名称]
上面的语句等价于
gitbook branch [分支名称]
git checkout [分支名称]
查看当前仓库的所有分支, 当前分支前会标识*,所有的提交修改都是针对当前分支,不会影响其它分支
git branch
分支修改完毕,切换回指定分支
方式1:git checkout [分支名称] # 不推荐
方式2:git switch [分支名称]
将指定分支合并到当前分支,这种有时会直接将master指向dev的最新位置【fast forward】
git merge [指定分支名称]
不采用【fast forward】,重新采用一个版本
git merge --no-ff dev -m "合并版本的信息"
同样也可以通过git rebase进行合并
git rebase master
删除分支名称
git branch -d [分支名称]
多个分支进行合并时,如果都有不同的版本,则需要手动更新后提交
查看版本合并情况
git log --graph --pretty=oneline --abbrev-commit
强行删除未合并的分支
git branch -D [分支号]Bug管理
1
2
3
4
5
6
7
8
9
10
11
12保存dev环境的内容
git stash
查看保存的工作现场
git stash list
恢复之前的工作现场
git stash pop # 恢复工作现场后,将保存的环境删除
git stash apply && git stash drop # 和上面一句达到的效果一致
复制一个特定的提交到当前的分支
git cherry-pick [分支号]多人协作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25查看远程库信息
git remote
查看远程库详细信息
git remote -v
推送分支
master分支一般是主分支,dev一般为开发分支。主分支一般由leader管理,dev分支由开发者开发使用
git push origin [分支名称]
抓取分支,clone下来以后,本地也只能看到本地的master分支
git clone git@github.com:[用户名]/[项目名称].git
clone项目下来以后在本地创建dev分支,然后用户就可以在本地dev分支上开始修改
git checkout -b dev origin/dev
当其它用户的提交与我提交的产生冲突时,此时git push报错
利用git pull将最新的提交从origin/dev抓下来,然后在本地进行合并后再推送
git pull
第一次git pull时会报错,需要将本地dev分支与远程origin/dev进行关联
git branch --set-upstream-to=origin/dev dev
将origin/dev远程提交与本地提交的版本信息简化为一条直线,使得查看更为简介
git rebase标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27打标签相当于给版本号起别名,打标签时需要进入对应的分支中
git tag 标签值
给指定的版本号打标签
git tag 标签值 版本号
查看所有的标签
git tag
查看指定标签对应的版本信息
git show 标签值
创建带有说明的标签
git tag -a 标签值 -m "标签对应的描述信息" 版本值
删除本地的标签
git tag -d 标签值
推送指定标签到远程origin
git push origin 标签值
一次性将本地所有未推送的标签推送到远程
git push origin --tags
删除origin的标签值
git tag -d 标签值
git push origin :refs/tags/标签值自定义忽略文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22在工作区目录下新建文件【.gitignore】
忽略文件的原则是:
1. 忽略操作系统自动生成的文件,比如缩略图等;
2. 忽略编译生成的中间文件、可执行文件等
3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
My configurations:
db.ini
deploy_key_rsa1
2
3
4
5
6
7
8
9在.gitignore中存在的文件强行提交
git add -f 文件名
检查添加的文件是否在忽视文件中
git check-ignore -v 文件名
配置命令的别名
配置的别名位于【.git/config】文件中的【alias】下,如果取消单个别名,则删除该行即可
git config --global alias 别名 "完整的命令名"搭建自定义git服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19安装
sudo apt install git -y
添加git用户
sudo adduser git
本地创建远程免密登录的密钥,然后将公钥传递到远程服务器.ssh文件夹下,命名为authorized_keys
ssh-keygen -t rsa
创建空仓库
sudo git init --bare simple.git
配置git用户的登录方式,为了安全
sudo usermod -s /usr/bin/git-ssh git
将服务器项目clone到本地
git clone [用户名]@[服务器ip]:[仓库路径]
之后就可以在本地进行推送了
问题汇总
.gitignore文件不生效
原因
因为git中新建文件会有缓存,并且如果之前的文件已经被纳入了版本管理中后,则修改.gitignore文件是不起效果的
解决方案
清除git本地缓存,然后重新提交
源码记录
1
2
3
4git rm --cached .
git add .
git commit -m "update .gitignore"
git push -u origin master
总结
为了提供实践方式,有人开发了一个demo用户学习:https://learngitbranching.js.org/?locale=zh_CN
该项目所在的github:https://github.com/pcottle/learnGitBranching
上述内容总结为脑图:脑图