git使用
0.0 代码合并流程
- 在各自的分支
self
上进行开发 - 切换到
develop
分支,git pull --rebase
同步最新代码
不要使用Git Pull
git pull
会创建一个新的merge commit
,这样提交历史不是一条清晰的线,包含无意义的分支合并,非常混乱。
而git pull --rebase
会解决这个问题,这个命令首先把你的commit
放到一边,拉取最新分支状态,最后为你自动变基到最新状态。
如果遇到合并冲突,使用git rebase --abort
撤回rebase
,然后使用git pull
或者使用交互式变基。
- 切换到自己的分支
self
,git rebase develop
对齐代码合并冲突
分支是临时的,完成了分支的职责后,就删除此分支。不要重复用分支,而是从主分支再创建一条特性分支。
1.0 第一件事git config
git config --list --show-origin
查看所有git配置以及所在文件- 使用
git config --global
可以设置git的基本信息(如用户名、邮箱),使用--unset
取消设置- 配置你的名称、邮箱以及编辑器
git config --global user.name "191220000-Zhang San" |
2.0 初始化仓库
- 本地仓库:
git init
创建一个新的 git 仓库,其数据会存放在一个名为.git
的目录下
删除仓库:删除 .git 文件夹
git add <文件名字,*表示全部> |
- 远程仓库:
git clone
克隆远端仓库
# 查看remote |
配置SSH
不推荐dsa和rsa,推荐ed25519
ssh-keygen -t ed25519 -C "your_email@email.com" |
Tag
git tag v0.0.version |
3.0 记录更新
git status
查看结果(会显示你对什么文件做了什么修改、操作),显示当前的仓库状态;-s
参数简短输出git diff
展示修改,具体查看修改内容git ls-files
查看git已跟踪文件git commit -m "comment"
创建一个新的提交git rm
移除文件,--cached
表明只删除版本文件,保留本地文件
本地删除文件后,使用
git add -u file
来删除索引文件
git rm -r --cache .
取消跟踪所有文件git mv
移动文件
4.0 提交历史、撤销操作
4.1 提交历史
git log
查看日志git log --pretty=oneline
简单日志,每次提交只有附带注释的一行
git log --oneline
更简洁的日志
4.2 撤销
放弃修改
git restore .
:撤销未commit的修改。 git2.32版本后取代git reset
进行许多撤销操作git restore <file_name>
: 将暂存区的修改重新放回工作区(--staged
将包括对文件自身的操作,如添加文件、删除文件)
git restore
与git add
相反,从索引恢复到工作区
git restore --stage
与git commit
相反,从数据库恢复到工作区
切换旧版本
git checkout <editon_id>
:恢复旧版本,会离开main分支,分离头指针,需要git switch -
回到main分支git commit --amend
: 编辑提交的内容或信息git reset HEAD <filename>
: 恢复暂存的文件(建议使用restore)git checkout -- <filename>
: 丢弃修改
5.0 远程仓库
远端操作
git remote
: 列出远端仓库名称,-v
附加网址git remote add <name> <url>
: 添加一个远端git push <remote>/ <branch>
:将branch分支推送到remote服务器git branch --set-upstream-to=<remote>/<remote branch>
: 创建本地和远端分支的关联关系git remote show <remote>
:查看<remote>仓库的信息git fetch
: 从远端获取对象/索引git pull
: 相当于git fetch; git merge
git clone
: 从远端下载仓库注意,
clone
后push
自己的代码会提示error: remote origin already exists.
远端仓库已存在,需要进行以下操作:git remote rm origin
删除远程库关联- 关联自己的仓库,[[#…/指南/Github使用指南 远程同步|教程]]
6.0 分支
git branch <branch_name>
: 创建分支
git swtich (-c) <branch_name>
比checkout更严格、更安全
git checkout <branch_name>
转到分支branch_name,-b
(brach)创建新分支branch_namegit merge <branch_name>
: 合并到当前分支
7.0 gitigore
# 所有.c文件
*.c
# 所有chapter*/eg/文件夹的文件
chapter*/eg/
# 所有子目录下的.class文件
**/*.class
# 不忽略hello.c文件
!hello.c
# 所有.c文件 |
NJU讲解
B站王慧妍老师:BV1Bu4y1K7yr
- git clone:从仓库下载一个版本,远端拉一个仓库
- git:自动化工具,帮你合并代码
- 工作区:显示屏上看到的代码版本
- 缓存区:被git追踪(git ignore跳过追踪)
- git commit:记录版本(不会出错的代码),增加节点,像一个快照,给此版本一个id;commit到版本trace中
- git特性:分布式,而不是集中的;git的各个版本在不同电脑上,可以两个人做两条线的分支,最后在merge
- git push/pull:把版本记录扔到一个可以共享的地方(如GitHub或其他托管仓库);或把别人的代码拉下来
- git merge:把大家的代码合并到一个版本
- check out:从某个版本分叉出去,一条独立的修改代码的记录,完成后再merge进主分支
- reset:一般用不到。回到以前的某个版本(需要id),丢弃之后的所有更改
- git add:把当前文件放到暂存区,以使之被跟踪
- 体验git:visualizing git concepts with d3
廖雪峰
创建版本库 - 廖雪峰的官方网站 (liaoxuefeng.com)
基础使用
- git init 初始化一个git仓库
- git add (文件) 把文件加入仓库
- git commit -m “wrote a readme file” 提交文件到仓库,-m是提交说明
- git status 查看结果(会显示你对什么文件做了什么修改、操作)
- 例子,修改完文件用status、diff查看修改,add提交之后再用status确认一遍修改,最后commit
- 提交完以后git status会显示没有要提交的修改(因为没有修改)
- git log 查看提交日志
- git reset --hard HEAD^ 回退到上一版本,HEAD表示当前版本,也可以写成HEAD~100
- 怎么回去?找到commit id,git reset --hard id
- 找不到id?使用git reflog查看过往命令
- 暂存区:git add 实际上是把文件添加到暂存区
- git checkout – file 丢弃工作区更改,回到上一次git add 的状态(此时git status为空)
- git reset HEAD file 把暂存区某个文件的更改撤销掉(此时status为not staged)
[[…/指南/Github使用指南#Github 远程仓库|远程同步]]
git remote add origin^ git@github.com:账户名/仓库名.git // ^origin是远程仓库名字 |
Git如何进行多人协作
使用Git多人协作,就要用到分支。
分支的特点是,将不同功能分配给不同的人开发,各个分支之间彼此独立、不受干扰。等待开发完成,只需要合并代码就可以了。
HEAD详解
HEAD指向当前所在分支,使用HEAD可以方便地标记版本。
例如HEAD1,表示从HEAD往前1个版本。遇到Merge的情况,HEAD^22表示选择第2个分支,在此基础上往前2个版本。