配置用户名和邮箱
git config --global user.name "username"
git config --global user.email email_address
git config user.name
git config user.email
git config --list
ssh-keygen -t rsa
创建/删除分支
git branch 分支name
git checkout 分支name
git branch
- 加上 -v 选项后,可以查看所有分支的最后一次提交的commit id和提交时的说明文字
git branch -v
- 加上 --merged 选项后,可以查看已经合并的分支
git branch --merged
git branch -d 分支名
- 对于还未合并的分支,-d无法删除,可以使用 -D 强制删除
git branch -D 分支名
合并分支
- 将分支B合并到分支A
- 切换到分支A
git checkout A
- 合并
git merge B
- 合并完成后,可以看到输出信息:Fast-forward( 快进合并) 。因为分支B是在分支A的基础上创建的,两个分支之间没有出现分叉。因此,使用快进合并即可。
- 存在分叉情况
git merge B
- 将A和B的提交整合在一起后,并产生一个新的提交
- 合并时产生冲突,提示:CONFLICT( content)
- 可以通过 git status 查看工作区状态,会显示 both modified 用来提示相应文件被两个分支修改过
- 手动解决,打开相应文件,可以发现冲突的代码已经被 <<< <<< <<< 和 == == == == == = 隔开了,示例如下:
<<< <<< < head
this commit is from AAAAA
== == == ==
this commit is from BBBBB
>> >> >> >> BBBBB
有head标签的表示是当前分支的修改,== == == = 下面的则是要合并的分支代码
这时需要自行决定冲突内容的去留,修改后,add以及commit即可
查看提交历史
git log
未加选项,会按顺序输出所有的提交日志
如:
git log -p 3
后面的数字表示要显示的日志数量
远程仓库设置
git remote origin 远程仓库地址
git push -u origin master
这样,就将本地的master分支同步推送到远程仓库的master分支上了
当要推送的远程分支上有比本地更新的提交时,此时无法推送成功,需要将远程分支的最新提交同步到本地后,然后在推送
git fetch origin master
git merge origin master
git pull origin master
存储工作区文件(stash)
例子:
A正在本地自己的分支上开发新功能,突然线上出现一个bug需要马上修复,A不得不切换到master分支并同步线上master分支的代码。但是A因为功能未开发完成,所以并没有将工作目录中的文件提交到功能分支,切换master分支后,功能分支相关的文件还在工作目录中,如果这些文件中跟线上master分支有冲突,那就没办法同步远程仓库master上的代码了。
这时,可以通过 git stash 命令,将当前工作的文件暂时存储到某个独立的地方,把工作区清理干净,避免未完成的修改对临时变更产生影响。
当A完成了线上bug的修复后,再切换到功能分支上开发,然后执行 git stash pop 命令,就可以把之前存储的文件调出来,继续功能开发。
git stash
git stash pop
撤销操作
假如本地临时调试修改了某个已提交的文件,那么这个文件就变成已修改的状态,但是又不想提交这个修改。
因此,调试完成后,可以通过 git restore 文件名 命令,将这个文件恢复到改动之前。
执行 git add 命令后,就是将修改后的文件添加到暂存区。
如果想从暂存区撤回,可以通过 git restore --staged 文件名 命令,将这个文件撤回。
如果暂存区的文件已经提交了,想要修改,又不再提交,而是想要修改刚刚的提交,可以通过
把要改的文件改好后添加到暂存区,然后执行 git commit --amend 命令
即表示要修正上一个提交
回退
git reset --hard commit_id
标签
git tag
git tag -l "***"
git show tagName
git tag -a tagName -m "message"
git tag -a tagName commitID -m "message"
git push origin tagName
git tag -d tagName
git push origin :refs/tags/tagName
推送
git push -f