查看篇
- 查看git仓库的提交记录:
git log
- 参数说明:
git log --oneline
单行显示git log信息git log --decorate
修饰性的显示,主要是可以查看分支信息- 注意:
git log
中commit fbac9424348189e46175316396d7659f726157ed
的commit后的前六位是当前log的标志,用于定位,如果需要回滚,可以使用这个标志位。
- 查看当前所处分支:
git branch -vv
- 查看当前分支名称:
git symbolic-ref --short -q HEAD
添加篇
- 添加修改的部分到本地仓库:
git add *
- 注意:“*”表示全部添加,一般使用的是下面的
git add .
- 注意:“*”表示全部添加,一般使用的是下面的
- 依据
.gitignore
过滤规则添加:git add .
- 注意:“.”表示的是当前目录下依照
.gitignore
来添加。 .gitignore
配置生效请看配置篇。
- 注意:“.”表示的是当前目录下依照
- 提交修改的部分到本地仓库:
git commit -m "文字信息"
- 注意:“文字信息”指的是当前提交版本的信息
- 提交到远程git仓库:
git push origin master
- 强制提交到远程git仓库:
git push -f [origin master]
- 只有在回滾的时候用到,注意没事不要乱用,会强制覆盖掉远程仓库的东西的。
- 注意:[]表示可选,默认是
origin master
撤销篇
- 撤销当前git add:
git reset HEAD .
- 回滾一个版本
git reset --hard HEAD^
- 注意:一个“”表示回退一个版本,如果要回退两个版本就用“^”
- 注意:回滾了之后找不回来原来的版本,除非必要,否则不要随便使用。
- 放弃当前所有的更改
git checkout .
- 注意:后面是“.”;当文件没有被提交commit过的时候,
git checkout .
是没有用的。
- 注意:后面是“.”;当文件没有被提交commit过的时候,
更新篇
- 更新其他人提交的代码【自动合并,没有merge信息,推荐!】
git pull --rebase
- 远程服务器本地端拉取更新
git fetch [origin master]
- 注意:拉取到本地,这个时候并没有开始合并工作
git pull [origin master]
- 注意:这里是合并工作,可能会出现Merge conflict…的错误……可以使用
git mergetool
解决,请看**配置篇——git冲突合并**博文。
- 注意:这里是合并工作,可能会出现Merge conflict…的错误……可以使用
- 使用远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master
- 修改分支的名称
git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote
暂存篇
- 将本地的修改的代码提交到暂存区:
git stash
- 注意:何时使用?如果你不想要commit,但是想要git pull,可以使用这个命令,将本地修改的代码先暂存到暂存区。
- 将暂存区中的代码取出来:
git stash pop
- 注意:取出来的时候可能会出现Merge conflict…的错误,可以使用
git mergetool
解决。
- 注意:取出来的时候可能会出现Merge conflict…的错误,可以使用
- 将暂存区中的内容清空:
git stash clear
注意:如果不知道为什么要用git stash
,可以看我的博文——commit your changes or stash them before you can merge.
克隆篇
- 浅克隆
- 仅仅克隆一层
git clone --depth 1 git@github.com:flutter/flutter.git
- 恢复浅克隆
- 取回Tag:
git fetch --tags
- 取回分支:(shallow clone之后,
remote.origin.fetch
的值是+refs/heads/master:refs/remotes/origin/master
,所以会发现怎么fetch都没有其他分支。)git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
git fetch --unshallow
- 取回Tag:
配置篇
- 重新配置
.gitignore
,请见我另一篇博文:.gitignore规则不生效的解决办法- 就是当你配置完
.gitignore
却发现配置一直不生效的时候,可以看看这篇博文的解决方案。
- 就是当你配置完
- git冲突合并请见我的博文:git 冲突合并
- 主要是用于拉取远程仓库的源码冲突的时候使用。
- Android Studio 工程.GitIgnore应该忽略的文件
自建仓库
普通用户ssh免密登陆完美解决(Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password))
遇到诸如:git clone ssh://sci.xxxx.domain:12933/xxx/xxx.git
,而且用户名不是自己本机的名称的时候,可以对单个域名进行映射。打开git配置文件:vim ~/.ssh/config
,增加如下内容:
Host sci.xxx.domain(域名)
user 用户名
这样子,在执行git clone
的时候,就会默认增加用户名,git clone ssh://用户名@sci.xxx.domain:12933/xxx/xxx.git
了。
常见错误
- git [packet_write_wait connection to xx.xx.xx.xx Broken pipe]解决办法
- 被墙了……
- Bad owner or permissions on .ssh/config 的解决
- 当我们在自己的服务器上搭建Git远程仓库,并让本地关联到远程仓库的时候,我们需要写一个config来让本地可以关联到非80端口的远程仓库。
- fatal: unable to access ‘https://github.com/gmarik/Vundle.vim.git/’: Could not resolve host: github.
- 这个问题一般出现在使用非github的域名的时候就会出现,需要配置一个重定向的配置文件。
- git出现 fatal: remote origin already exists.
- 出现这个问题,表示你这个仓库你之前添加过远程仓库,可以使用