Git常用操作命令,方便自己查询和记录成长路上的每一步
作为一名开发者Git是你绕不过去的,git是一款优秀的代码管理的工具。学会使用git是每个程序员的必修课。
初始化配置
- 生成本地公钥:
ssh-keygen
- 配置本地global信息:
1.git config --global --list
查看global配置,git config -l
查看所有config
2.git config --global user.name "Your Name Comes Here"
配置用户名
3.git config --global user.email you@yourdomain.example.com
配置邮箱
本地生成仓库分支
git init
本地初始化一个git仓库git remote add origin git@github.com:XXX/XXX.git
将本地初始化的仓库交给远程仓库管理git clone -b xxx git@github.com:XXX/XXX.git
将远程库的代码clone 到本地- 如果遇到Filename too long,在bash运行
git config --global core.longpaths true
git remote -v
查看远程仓库地址git remote rm origin
删除远程仓库git branch
查看此时所在分支git branch -a
查看所有远程分支git checkout -b xxx
创建本地分支,并切换到此分支,git checkout commitId -b xxx
以某次commit创建分支git checkout -b <branch> origin/<branch>
创建分支,并将远程分支同步git checkout --orphan xxx
创建一个空白分支git push origin HEAD:xxx
将本地分支推送到远端库,git push origin --delete xxx
删除远端分支git branch -d xxx
删除本地分支
添加提交
git add xxx
添加具体文件,git add -A
添加所有修改 到缓存区git commit -m "xxx"
将修改添加到HEADgit commit --amend
追加提交git push origin xxx
将修改推送到远程分支
本地修改操作
git status
查看本地修改状态git checkout – XXX
撤销本地某个文件的修改,git checkout .
撤销本地所有文件的修改git reset HEAD XXX
撤销暂存区回到工作区,git reset HEAD .
撤销所有暂存区修改git reset -- .
将暂存区的数据放回工作区git reset -- hard HEAD^
本地仓回退到上次提交之前,工作区不变- 本地提交回退:
git reflog
查看commitId,然后git reset --hard XXX
- 公共分支版本回退:revert 操作会产生新的commitId,提交到分支
git revert HEAD
撤销最近一次提交git revert HEAD~1
撤销上上次的提交,注意:数字从0开始git reset --soft HEAD~1
软重置,让提交回归暂存区git revert 0ffaacc
撤销0ffaacc这次提交
放弃本地修改,强制和远程同步
有些时候我们只想要git服务器中的最新版本的项目,对于本地的项目中修改不做任何理会,就需要用到Git pull的强制覆盖,具体代码如下
git fetch --all
git reset --hard origin/master
git pull
对比操作 git diff
git diff xxx
比较工作区与暂存区文件git diff --cached xxx
比较暂存区与最新版本库文件git diff HEAD xxx
比较工作区与最新版本库文件git diff commit-id xxx
比较工作区与指定commit-id 文件git diff --cached commit-id xxx
比较暂存区与指定commit-id 文件git diff commit-id commit-id
比较两个 commit -id 的差异
日志操作 git log
git log
显示所有历史提交,git log --oneline
将每条日志输出为一行git log -n
显示前n条提交git log --author=xxx
显示作者为xxx的提交git log --grep=xxx
显示指定为xxx关键词的提交git log --committer=xxx
显示指定提交者的提交git log -p -- xxx
查看某个文件的修改记录,xxx为完整路径git show commit-id
查看某次commit 的修改git show --name-only HEAD
仅查看某次提交修改的文件列表
标签操作 git tag
git tag
显示当前版本库所有标签列表git tag xxx
创建一个taggit tag xxx - m "xxx"
创建一个带描述的taggit push origin tag
把本地标签推送到远端git tag -d xxx
删除本地taggit push origin :refs/tags/xxx
本地删除tag,执行此命令删除远端tag
git fetch 理解
git fetch
更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中git fetch git@github.com:XXX/XXX.git
更新远程repo上的所有branch的最新commit-id,将其记录git fetch git@github.com:XXX/XXX.gitremote_branch_name:local_branch_name
git pull
相当于git fetch
之后git merge
更新本地与远端数据一致,如果有冲突,则在本分支解决冲突。git pull --rebase
用在合并代码的时候其作用就是在一个随机创建的分支上处理冲突,避免了直接污染原来的分区,在出现冲突之后,git自动帮你创建一个新的分支,在这新的分支上处理完冲突之后,运行git rebase --continue
即可
git reset 回退
git reset的作用是修改HEAD的位置,即将HEAD指向位置改变为之前存在的某个版本。
适用场景,恢复到之前的某个版本,且那个版本之后的提交我们都不要了,就可以用这个方法。
git reset --hard 目标版本号
将版本回退到之前的版本git log
查看版本信息,此时本地HEAD已经指向之前版本git push -f
提交更改,此处用git push 会报错,原因我们本地HEAD之前比远程库要旧
git revert 理解
git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
比如我们现在有三次提交,commit id 分别为:
commit d04a033afa5ad71eff8c44a5583ff1cbc8228552 (HEAD -> master)
版本三
commit c6bad8938ddea2bb808de7919c5177e3f51d6290
版本二
commit 6d7469211b9c1104c2275c74a0734e8179f5088a
版本一
我们不想要版本二的提交信息了。我们可以这么做:
git revert -n 版本号
反做 。这里如果有冲突,处理冲突git add 文件名
- 提交,使用
git commit -m 版本名
git push
推上远程库 ,这时会生成一个版本四
git cherry-pick 理解
git cherry-pick命令的作用,就是将指定的提交应用于其他分支。
比如我们需要在master分支和另外一个feature分支同时提交相同的代码,我们就可以用git cherry-pick
我们切换到feature分支. master 同步到feature分支
git checkout feature
git cherry-pick [commitId]
cherry-pick 也支持一次转移多个提交
git cherry-pick A, B
git push origin feature
未完待续。