社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
1.暂存工作区内容
git stash 保留当前工作区状态,只会储藏已经在索引中的文件;指定 --include-untracked 或 -u 标记,会存储未被索引的文件;--keep-index,不会储藏已暂存的东西;
git stash list 查看保留的工作状态
git stash pop 恢复工作区状态
(git stash pop恢复工作区的同时会删除stash中的内容;如果不想删除内容,可以使用git stash apply恢复工作区,然后再使用git stash drop删除stash中的内容,git stash apply 版本号 可以用来恢复指定版本的工作区内容)
2.rm误删除文件恢复
git reset HEAD file
git checkout -- file
3.版本切换
git reset --hard commit_id 撤销修改,但是不会保留修改
git reset --soft commit_id 保留修改,将改动放至缓存区
git reset --mixed commit_id 保留修改,不将改动放至缓存区
4.修改commit提交信息
git commit --amend #修改最后一次提交的commit信息
5.变基
rebase 可以把本地未push的分叉提交历史整理成直线,也可以与commit操作结合,更改commit信息
底层操作过程:先将HEAD指向目标分支和当前分支的共同祖先commit节点;对比当前分支指针与HEAD指针提取相应的修改并存为临时文件;将当前分支指针指向目标分支指针;将临时文件依序apply完以后再将HEAD指向当前分支
git rebase -i HEAD~n
6.挑拣commit提交
cherry-pick 可以用于将在其他分支上的 commit 修改,移植到当前的分支。当执行完 cherry-pick 之后,将会自动生成一个新的 commit 进行提交,也就是会有一个新的 commit ID。增加 -x 参数,表示保留原提交的作者信息进行提交
*可以一次将一个连续的时间序列内的 commit ,设定一个开始和结束的 commit ,进行 cherry-pick 操作;
git cherry_pick <start-commit-id>…<end-commit-id> 左开右闭
git cherry_pick <start-commit-id>^…<end-commit-id> 左闭右闭
*注意:cherry pick的commit id一定要按照时间顺序来,不然很容易出现问题
7.在不同分支挑拣文件
挑选某个分支上的某些文件至当前分支:git checkout <branch name> file1 file2 file3
eg:git checkout feature f.txt 将feature分支的f.txt复制到当前分支
将当前分支上的某个文件至某个分支:git checkout --patch <branch name> file1 file2
eg:git checkout --patch master f.txt 将当前分支上的f.txt粘贴至master分支
8.拉取远程分支至本地分支
git checkout -b 本地分支名 远程仓库名/远程分支名
9.合并分支
git merge dev 将dev分支合并至当前分支
底层过程:git会查找两个分支末端所指的快照以及这两个分支的祖先,做三方合并;当两个要合并的快照其中一个为祖先时,将默认为fast-forward模式合并(简单的将指针向前推进),该模式下删除分支之后可能会丢失分支信息;为了保留完整信息,可以禁用Fast-forward模式:git merge --no-ff -m “merge with no-ff” <branch mane> --no-ff 表示禁用Fast-forward,此时git会在merge时生成一个新的commit,因此需要使用-m 提交相关commit描述
10.拉取远程分支更新至本地
git pull <远程仓库名> <远程分支名>:<本地分支名>
git pull = git fetch + git merge(git pull 先从线上抓取东西下来fetch,然后更新进度合并merge)
git pull --rebase (先从线上抓取东西下来fetch,然后更新进度合并rebase)
*如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
11.提交代码至远程仓库
git push <仓库名> <分支名> 将本地仓库所做更改提交至远程仓库某一分支
*首次push:git push -u origin master
12.比较两个版本代码之间的不同
git diff 比较算入暂存区修改的当前文件与工作区文件之间的区别
git diff HEAD 比较当前最新commit与工作区的区别
git diff commit_id 比较某个commit与工作区的区别
git diff --cached 比较最新提交与暂存区的区别
git diff --cached commit_id 比较某个commit与暂存区的区别
13.Fork和分支的区别
Fork:不是Git操作而是GitHub操作,将原项目进行拷贝,新建一个Repository,在该Repository所做操作,对原来的项目的Repository没有任何影响。当想要向原项目合并时,需要提交merge Requests或pull Requests。
分支:Git操作,是一个项目仓库中的代码管理方式,一种方便多人协作的方式。在原项目的Resposity进行操作,操作历史会被记录。
14.添加自定义git命令
*修改global文件,需在.gitconf文件中添加自定义命令表示方式,等号右边的操作等同于等号左边的操作:
vim ~/.gitconf
eg:添加内容
[alias]
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
mycommit = log --author=cym
保存修改文件之后,在命令行中使用命令git lg与在命令行中使用命令log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit效果是一样的
*也可以修改某个项目的.gitconf文件,此时的自定义命令只对该项目起作用。项目的.gitconf文件在该项目主目录下的.git文件下名为config
eg:项目名为test 该项目的conf文件路径为:test/.git/config
15.查看某次提交的具体修改内容
git show <commit id>
16.仅查看自己的commit历史
git log --author=username
git log --name-only --author=username #显示每次commit涉及的文件名
git log --stat --author=username #显示每次commit涉及的文件名,及修改内容汇总
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!