常用Git命令
1、基本使用
工作区 --> 暂存区 --> 本地仓库 --> 远程仓库
1、添加到暂存区
git add 文件名
# 添加所有被修改文件
git add ..
2、提交到本地仓库
git commit -m "提交说明"
3、推送到远程仓库
git push origin master
4、查看本地提交记录
#查看本地最新提交
git show
# 查看简短的git提交日志 ,按q退出
git log --oneline
2、故障解决
2.1 修改了工作区,但是没有add
到暂存区,此时想撤销这次的修改(当然,你可以选择手动讲修改改回来只要你不嫌麻烦),一般情况下我们都使用IDE
开发,很多修改会被自动add
到暂存区,所以这个命令一般很少用到
# 查看哪些文件会被撤销
git checkout --
# 指定撤销某个文件
git checkout -- ./文件路径/文件名
# 指定撤销某个目录下的所有文件
git checkout 相对目录/
git checkout src/
2.2 修改被add
到暂存区,还没有提交到本地仓库,测试就要做两部,先把暂存区的内容退回到工作区,然后按照上面的命令撤销本次修改
# 将某一个被修改的文件退回到工作区
git reset head -- 指定文件
# 将所有修改退回到工作区 不加任何参数
git reset head --
# 撤回工作区的修改
git checkout -- 文件名
和上面类似的命令
git restore --staged [file] : 表示从暂存区将文件的状态修改成 unstage 状态。当然,也可以不指定确切的文件 ,例如:
git restore --staged *.java 表示将所有暂存区的java文件恢复状态
git restore --staged . 表示将当前目录所有暂存区文件恢复状态
--staged 参数就是表示仅仅恢复暂存区的
- 总结:**
上面两个操作在工作中不是很常用,应为IDE一般会又回退修改的按钮直接一件就能做到,所以一般不需要写命令
2.3 当我们不想提交的代码被commit到本地仓库怎么办:
git restore -s HEAD~1 READEME.md // 该命名表示将版本回退到当前快照的前一个版本
git restore -s 91410eb9 READEME.md // 改命令指定明确的 commit id ,回退到指定的快照中
git reset --soft HEAD^ // 该命令表示撤销 commit 至上一次 commit 的版本
git reset --soft HEAD^ 使用这个命令的时候报下面错,与下面相同的原因
今天在使用git回退功能的时候,遇到以下错误:
git reset --hard HEAD^:
fatal: ambiguous argument ‘HEAD^’: unknown revision or path not in the working tree.
Use ‘–’ to separate paths from revisions, like this:
‘git […] – […]’
查了下原因可能有两种:
因为cmd控制台中换行符默认是,而不是 ,所以符号被git编译为换行符了,解决方案:
git reset --hard “HEAD^”
git reset --hard HEAD~[return times]
该仓库到目前为止只有commit过一次代码,故已经是head版本,也会报这样的错,无需关心直接commit或者rm即可
参考原文链接:https://blog.csdn.net/voledmort/article/details/100794005
2.4 当错误的提交被推到了远程仓库时
后面更新
3、清理未跟踪的文件
- 查看哪些文件/目录将会被删除
git clean -dn
- 只删除没跟踪的文件,不删除目录
git clean -f
- 删除没跟踪的文件和目录
git clean -df
用之前先查看一下会删除哪些文件,不要造成误删!!!!
4、分支管理
- 1、查看本地和远程的分支
git branch -a
- 2、删除本地/远程分支(确保分支已合并)
#删除本地分支
git branch -d 分支名
#删除远程分支
git push origin --delete 分支名 # 删除远程分支时不会同步删除本地分支,需要再次删除
- 3、创建分支
git branch 分支名
# 指定版本号创建分支 这个命令非常实用
# 当你想从某次提交或tag拉一个分支出来时就可以用这个分支
# 注意此处的commitId需要完整的commitId,简写的不行
git checkout -b branchName commitId/tag
- 4、打版发布
# -a标签名 -m提交说明
git tag -a 标签名(v1.0) -m"标签说明" 某一次提交的id
git tag -a v1.0 -m"基本完成" 363e9be
# 查看标签
git show v1.0
# 删除标签
git tag -d v003
# 推送标签到远程
git push origin v003
# 推送所有标签到远程(本地删除过标签,远程也会修改)
git push origin v003
5、暂存当前修改
git stash
# 恢复最后一次修改
git stash pop
# 查看还有多少修改
git stash list
常用git stash命令:
(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash
# 单独保存指定的几个文件
$ git stash push <file1> <file2> <file3> [file4 ...]
$ git stash push xx.txt aa.java -m"保存信息"
摘自:https://blog.csdn.net/fs000x/article/details/104329487/
6、合并遇到冲突时,回到合并前状态
git merge --abort
# 总结一下
该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。
但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态。
(特别是这些未commit的文件在合并的过程中将会被修改时)
警告:运行git-merge时含有大量的未commit文件很容易让你陷入困境,这将使你在冲突中难以回退。因此
非常不鼓励在使用git-merge时存在未commit的文件,建议使用git-stash命令将这些未commit文件暂存
起来,并在解决冲突以后使用git stash pop把这些未commit文件还原出来。
摘自:https://blog.csdn.net/weixin_43883776/article/details/85062087
7、远程分支已经删除,但是本地任然能看见,看起来比较难受;更新本地的远程分支信息
git fetch origin --prune
8、配置全局和单个仓库的username
和email
通常git会配置一个全局的username
和email
但是又是我们需要给单个仓库配置username
和email
# 查看全局配置 其中在最下面会显示但前仓库的配置
git confit --list
# 配置全局username和email
git config --global user.name "github's Name"
git config --global user.email "github@xx.com"
# 配置单个仓库的username和email
git config user.name "gitlab's Name"
git config user.email "gitlab@xx.com"
# 单个仓库的配置可以到仓库根目录的.git中的config文件查看
vim .git/config
9、本地分支和远程分支关联
有时候直接使用git pull
拉取远程提交时提示拉取失败
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
此时需要指定哪个远程的哪个分支货主将本地分支和远程建立联系
git branch --set-upstream-to=origin/dev dev
在多远程仓库的情况下未尝试,待以后探索
9、分支的操作
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
10、日志查看
git log --graph --pretty=oneline --abbrev-commit
--graph 线型比较详细的日志 包含hash message 提交时间和提交人
--pretty=oneline 将详细的日志简化为一行 只包含hash 和提交message
--abbrev-commit 缩写hash值
11、版本回退
# 回退到指定commit
$ git reset --hard 1094a
# 回退到上一个版本
$ git reset --hard HEAD^
# 本地当前分支和远程某分支保持一致的HEAD位置
$ git reset --hard origin/master