git常用操作总结
chenxiaochun opened this issue · 0 comments
提交文件到本地仓库
先提交文件到本地暂存盘,然后再提交到本地仓库:
git add ./
git commit
或者只需要一条命令直接搞定:
git commit -am [message]
使用-am
参数之前,建议一定要使用git status
查看一下你当前文件的修改情况,看是不是所有的文件都需要被 commit,养成这个习惯很重要。因为本来分成两步的事情,可以让你在暂存区中进行一下确认。现在没有了这步确认,所以一定要使用git status
查看一下。
此外,git add
还可以指定参数来应对特定的情况:
git add -u
,将文件修改和文件删除添加到暂存盘git add .
或者git add -A
将文件修改、文件新建、文件删除添加到暂存盘git add * -f
将对文件的所有操作都添加到暂存盘,包括添加到.gitignore
中被忽略的文件
修改最近的一条 commit message
git commit --amend
分支操作
- 创建并切换到新分支:
git checkout -b [name]
- 拉取远程分支到本地,并创建一个新的分支:
git checkout -b 本地分支名 origin/远程分支名
- 修改分支名称:
git branch -m [newName]
查看分支
- 查看本地分支列表:
git branch -l
- 查看远程分支列表:
git branch -r
- 查看远程分支与本地分支映射关系:
git branch -vv
- 查看各分支最后一次提交信息:
git branch -v
- 查看本地仓库追踪远程仓库的状态:
git remote show origin
- 查看已合并到
master
分支:git branch --merged
- 查看未合并到
master
分支:git branch --no-merged
合并分支
- 合并一个分支中的一个(或者几个)commit 到另一个分支上:
git cherry-pick
删除分支
- 删除本地分支:
git branch -D [branch_name]
- 删除远程分支:
git push origin :[branch_name]
、git push origin -d <branch-name>
- 删除所有已合并分支:
git branch -d `git branch --merged`
清理分支
- 清除所有失效的远程分支或根据提示删除特定失效分支:
git remote prune origin
- 修改分支名称:
git branch -m <oldbranch-name> <newbranch-name>
仓库地址查看、修改
修改当前项目的远程仓库地址
- 直接修改:
git remote set-url origin [url]
- 或者先删除再添加
git remote rm origin``git remote add origin [url]
- 查看当前项目的远程仓库地址:
git remote -v
拉取远程文件时,与本地文件发生了冲突:
这种情况一般发生在本地文件已经做了若干修改,但还没有提交到暂存盘。然后我想拉取一下远程仓库最新文件,结果因为某些文件和远程仓库造成冲突而无法拉取成功。这时你可以使用以下操作:
git stash
git pull origin master
git stash apply
第一步是将你修改过的文件先暂时贮藏起来(注意:和上面提到的暂存盘不是一回事儿),第二步是从远程仓库拉取最新的文件到本地,然后第三步是再将刚才贮藏的文件恢复出来。
三步操作完之后,最新文件已经拉取到本地,但是有可能和本地文件依然存在冲突。但此时你只要去解决每个文件的冲突即可。
推送文件到远程仓库时,发生了冲突:
这种情况一般发生在文件已经提交到本地仓库,但是往远程仓库推送时发生了冲突,可以使用以下操作:
git pull origin master --rebase
git push origin master
先将远程操作仓库的提交记录拉到本地进行衍合,然后再次进行提交即可。
文件版本恢复
- 从暂存盘恢复文件:
git reset [fileName]
- 撤消某一次的
commit
操作,不会影响在这之前或者之后的commit
记录:git revert
- 从本地仓库恢复文件:
git checkout -- [fileName]
- 从某个分支恢复文件:
git checkout [branchName] -- [fileName]
- 清除本地未被追踪的文件:
git clean
,加上-df
表示同时清除文件和文件夹 - 强制使用远程文件覆盖本地文件:
git reset --hard [origin/branchName]
- 强制将当前项目推送到远程仓库:
git push origin master --force
恢复当前项目到某一历史版本
先通过git log
命令获取要恢复到的版本 hash 值,然后再用git reset
恢复。--hard
参数表示不会保留现在还未 stage 的修改:
git reset [tree-ish] --hard
--soft
参数表示会保留还未 stage 的修改:
git reset [tree-ish] --soft
查看修改历史
git log
,查看提交历史git log --stat
,查看每一次的提交都修改了哪些文件git log -p
,深入查看每一个文件的修改细节git log --grep [message]
,过滤查看提交日志git show [tree-ish]
,查看某一次提交的修改细节git log -- pathname
,查看指定目录/文件提交信息git log --graph --decorate --oneline --simplify-by-decoration --all
,查看所有分支的切换历史信息git whatchanged
,查看每一条提交记录的修改信息git shortlog -sn
,列出代码仓库的提交者统计信息git blame [filename]
,查看某一文件每一行的所有修改历史git blame -L 10,11 README.md
,查看指定行数的修改历史
修改文件夹/文件名称操作
git 默认情况下对文件名称是大小写不敏感的,例如,如果想将foo
修改为Foo
,并期望 git 能够识别出来,需要执行两步操作。首先,执行git mv foo tmp
,将foo
重命名为一个临时文件名;然后再执行git mv tmp Foo
,将其命名为最终文件名即可。
git 子模块操作
- 克隆主库的时候就要初始化子模块:
git clone --recursive [url]
- 已经克隆了主库,但是还没有初始化子模块:
git submodule update --init --recursive
- 已经克隆了子模块,现在想从源上更新子模块:
git submodule update --recursive --remote
- 向当前库中添加一个新的子模块:
git submodule add [url]
- 更新子模块信息:
git submodule update
git 常用设置
git config core.ignorecase false
,忽略大小写- 如果某些文件/文件夹已经提交到了代码仓库,那么后面你再想将某些文件/文件夹添加到
.gitignore
中之后是不起作用的。解决办法就是在修改完.gitignore
之后,执行git rm -rf --cached .
命令即可