Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git常用操作总结 #44

Open
chenxiaochun opened this issue Nov 29, 2017 · 0 comments
Open

git常用操作总结 #44

chenxiaochun opened this issue Nov 29, 2017 · 0 comments

Comments

@chenxiaochun
Copy link
Owner

chenxiaochun commented Nov 29, 2017

提交文件到本地仓库

先提交文件到本地暂存盘,然后再提交到本地仓库:

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 .命令即可
@chenxiaochun chenxiaochun changed the title git常用命令总结 git常用操作总结 Nov 30, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant