基础命令
git init # 初始化本地仓库
git add -A . # 一次添加所有改变的文件
git add -A # 添加所有内容
git add . # 添加新文件和编辑过的文件不包括删除的文件
git add -u # 添加编辑或者删除的文件,不包括新添加的文件
git commit -m '版本信息' # 提交的版本信息描述
git status # 查看状态
git push -u origin master # 推送到远程仓库
git pull # 拉取远程仓库代码到本地
git branch -av # 查看每个分支的最新提交记录
git branch -vv # 查看每个分支属于哪个远程仓库
git reset --hard a3f40baf9a54a644eebd52e # 代码回退到某个提交记录
分支操作
git branch -a # 查看本地都有哪些分支
git branch dev # 新建分支
git branch # 查看当前分支
git checkout dev # 切换分支
git branch -d dev # 删除本地分支
git push origin :dev # 同步删除远程分支
修改远程仓库地址
● 方法 1,先删后加:
● git remote rm orgin # 先删除
● git remote add orgin 仓库地址 # 链接到远程 git 仓库地址
● 方法 2,修改命令:
● git remote set-url orgin # 仓库地址
远程分支获取最新的版本到本地
● git pull
● 如果以上命令失败尝试以下步骤:
首先从远程的 origin 的 master 主分支上下载最新的版本到 origin / master 分支上
git fetch origin master
比较本地的 master 分支和 origin / master 分支的差别
git log -p master..origin/master
进行合并
git merge origin / master
拉取远程仓库指定分支到本地
首先要与 origin master 建立连接:
git remote add origin git@github.com:xxxx/nothing2.git
切换到其中某个子分支:
git checkout -b dev origin/dev
可能会报错如下:
fatal: Cannot update paths and switch to branch 'dev' at the same time.
Did you intend to checkout 'origin/dev' which can not be resolved as commit?
原因是你本地没有 dev 这个分支,这时你可以用 git branch -a 命令查看本地是否具有 dev 分支
我们需要:git fetch origin dev #命令来把远程分支拉到本地
然后使用:git checkout -b dev origin / dev # 在本地创建分支 dev 并切换到该分支
最后使用:git pull origin dev # 就可以把某个分支上的内容拉取到本地
常见问题
Question 1
如何解决 ''' failed to push some refs to git '''
Answer 1
* ''' git pull --rebase origin master ''' 进行代码合并
* ''' git push -u origin master ''' 即可完成代码上传
Question 2
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/master
Answer 2
指定当前工作目录工作分支,跟远程仓库分支之间的联系
git branch --set-upstream master origin/master
Question 3
git pull 获取最新代码报以下错误
fatal: refusing to merge unrelated histories
Answer 3
git pull origin master --allow-unrelated-histories
Question 4
使用钩子 pre-commit,提交代码提示如下错误:
$ git commit -m '.'
sh: eslint: command not found
pre-commit:
pre-commit: We've failed to pass the specified git pre-commit hooks as the `fix`
pre-commit: hook returned an exit code (1). If you're feeling adventurous you can
pre-commit: skip the git pre-commit hooks by adding the following flags to your commit:
pre-commit:
pre-commit: git commit -n (or --no-verify)
pre-commit:
pre-commit: This is ill-advised since the commit is broken.
pre-commit:
Answer 4
● 打开项目中的 .git/hooks 文件夹,找到 pre-commit.sample 文件,将以下代码替换到文件中,或者,npm install pre-commit --save 也可以,这个命令会自动执行以下操作。
#!/bin/bash
TSLINT="$(git rev-parse --show-toplevel)/node_modules/.bin/tslint"
for file in $(git diff --cached --name-only | grep -E '\.ts$')
do
git show ":$file" | "$TSLINT" "$file"
if [ $? -ne 0 ]; then
exit 1
fi
done
● 将 pre-commit.sample 文件名修改为 pre-commit。
Question 5
.gitignore 规则不生效的解决办法
Answer 5
把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是 .gitignore 只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改 .gitignore 是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:
git rm -r --cached . 或者 git rm -r README.md
git add .
git commit -m 'update .gitignore' // 如果报错,将单引号改为双引号