Git常用命令参考手册
整理了一篇git常用的命令参考手册,命令顺序按照一个项目从头到尾的常用命令顺序做了排序,后续会继续完善内容示例并补全其他命令使用说明,希望对不熟悉的小伙伴有所帮助。
git config
# 配置列表
git config --list
# 或
git config -l
# 全局配置
git config --global user.name "username"
git config --global user.email "email"
# 查看配置
git config --list |grep user.name
git config --list |grep email
# 关闭https证书验证
git config --global http.sslVerify false
# 允许长文件名
git config --global core.longpaths true
git checkout
#创建本地分支
git checkout -b localbranch
# 指定local分支名字sf
git checkout -b localBranchName origin/serverfix
# 自动创建remote同名分支,并track
git checkout --track origin/serverfix
git branch
# 查看本地和远程所有分支
git branch -a
# 详信息信息
git branch -a -v
# 查看远程分支
git branch -r
#查看本地分支列表
git branch --list
#链接中央仓库
git branch --set-upstream <remote-branch>
git branch --set-upstream-to=origin/0.1-beta 0.1-beta
# 示例:
git branch -u origin/serverfix
# 查看看分支track情况(不是实时更新的,从上次更新算起(fetch、pull))
git branch -vv
#删除本地分支
git branch -d branchname
git branch -D branchname // 强制删除
git push origin --delete branchname // 有必要的情况下,删除远程分支
git add
#添加全部文件到暂存区
git add .
git commit
#提交代码
git commit -m '提交日志描述'
git stash - 暂存与恢复
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git stash #把所有没有提交的修改暂存到stash里面。
git stash pop #恢复stash中暂存的内容
git reset --hard HASH #返回到某个节点,不保留修改。
git reset --soft HASH #返回到某个节点。保留修改
git clean -df #返回到某个节点
git clean 参数
-n 显示 将要 删除的 文件 和 目录
-f 删除 文件
-df 删除 文件 和 目录
-xdf 清除未加入版本控制的文件
git fetch
git fetch
git pull
#从远端origin/develop拉取代码
git pull origin develop
git push
git push <远程主机名> <本地分支名>:<远程分支名>
# origin为设置的远程仓库别名, master为本地分支名, djs为远程分支名
git push origin master:djs
#将本地的develop分支推送到origin主机
git push -u <remote> <local-branch>
git push -u origin local-develop
#创建远程分支,将本地develop-local推送到远程develop-remote分支上
git push origin develop-local:develop-remote
#使远程仓库回到你本地仓库未修改之前的那个版本,远程仓库中进行的相关修改会被删除,然后上传基于你本地仓库的修改。
#这如果在企业开发中就会让别的程序员的这些天的开发付之东流,一切回到解放前。
git push -u origin master -f
创建一个新目录做为仓库,并推送到远程仓库
git clone http://xxxx/xx/xxx.git
cd weather-gather
touch README.md
git add README.md
git commit -m "add README"
git push -u origin develop
初始化已存在的目录做为仓库,并推送到远程仓库
cd existing_folder
git init
git remote add origin http://xxxx/xx/xxx.git
git add .
git commit -m "Initial commit"
git push -u origin develop
推送一个已存在的本地仓库到远程仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin http://xxxx/xx/xxx.git
git push -u origin --all
git push -u origin --tags
git status
#查看本地仓库状态
git status
git merge - 合并分支
git checkout master //切换到master分支
git merge hotfix //将hotfix分支上的修改合并到master分支上
git cherry-pick - 合并指定提交
将一个分支上的某个commit合并到另一个分支,可用使用cherry-pick命令实现。
比如:将dev分支上commit_id为f99f2b57b7ee72d55a08e699fbeec34cbac96cb8的提交合并到⇨master分支:
# 1)切换到master分支:
git checkout master
# 2)执行cherry-pick命令:
git cherry-pick f99f2b57b7ee72d55a08e699fbeec34cbac96cb8
3)推送到远程master仓库:
git push
注意master上新的commit id与dev上的id并不相同,即只是将dev上的修改拷贝过来作为一个新的提交。
git reset
#将本地代码重置为远端仓库版本
git reset --hard origin/develop
git alias - 命令别名
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.st status
下面命令要在git bash中使用,如果在dos中使用,会提示系统找不到指定的文件
。
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
效果:
HJX@DESKTOP-S4IJD6M MINGW64 /e/hejinxu/workspaces-get-started/vue-test (master)
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
HJX@DESKTOP-S4IJD6M MINGW64 /e/hejinxu/workspaces-get-started/vue-test (master)
$ git lg
* 7ab76a4 - (HEAD -> master, origin/master) add: 提交getters示例 (9 weeks ago) <hejinxu>
* a1febca - add: 添加vuex的getters使用示例 (9 weeks ago) <hejinxu>
* af61a6e - add: 提交vue2-router示例 (2 months ago) <hejinxu>
* 3ee7c19 - add README.md. (2 months ago) <Bright>
* b35dea0 - add: 添加vue-router和vuex测试代码 (2 months ago) <hejinxu>
* f73e70c - add: 添加.gitignore文件 (3 months ago) <hejinxu>
git remote - 远程仓库管理
# 查看关联的远程仓库
git remote -v
# 查看远程仓库信息
git remote show origin
# 删除本地指定的远程地址
git remote remove origin
# 更新本地的远程分支列表
git remote update --prune origin
# 删除本地库中有但在远程库已经不存在的分支
# 参考:https://blog.csdn.net/wangqingpei557/article/details/53147086
git remote prune origin
修改关联的远程仓库
方法一 通过命令直接修改远程地址
进入git_test根目录
git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
git remote set-url origin http://192.168.100.235:9797/john/git_test.git
方法二 通过命令先删除再添加远程仓库
进入git_test根目录
git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
git remote rm origin
git remote add origin http://192.168.100.235:9797/john/git_test.git
方法三 直接修改配置文件
进入git_test/.git
vim config
修改 [remote “origin”]下面的url即可
[core]
repositoryformatversion = 0
filemode = true
logallrefupdates = true
precomposeunicode = true
[remote "origin"]
url = http://192.168.100.235:9797/shimanqiang/assistant.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
如果修改远程关联的仓库后,需要推送代码,可以执行
git push -u origin --all
或
git push -u origin --tags
git关联本地仓库与远程仓库
#查看本地关联的远程仓库
git remote -v
# 设置远程仓库地址
git remote add origin http://xxx.git
# 拉取远端仓库
git pull origin master --allow-unrelated-histories
# 将本地分支与远程仓库master分支关联
git branch --set-upstream-to=origin/master master
git rm - 去除某文件的版本控制
git rm -r --cached file # -r 是允许递归删除,当要删除的是文件夹的时候有用
补充说明,该命令主要用于某些文件已经加入了git控制,但希望.gitignore排除他们的情况,所以要想git不去追踪这些文件,还要将这些文件加入到.gitignore文件清单中。
git clean - 清除文件
git checkout . && git clean -xdf
参数说明:
-d
Normally, when no <pathspec> is specified, git clean will not recurse into untracked directories to avoid removing too much. Specify -d to have it recurse into such directories as well. If a <pathspec> is specified, -d is irrelevant; all untracked files matching the specified paths (with exceptions for nested git directories mentioned under --force) will be removed.
-f
--force
If the Git configuration variable clean.requireForce is not set to false, git clean will refuse to delete files or directories unless given -f or -i. Git will refuse to modify untracked nested git repositories (directories with a .git subdirectory) unless a second -f is given.
-i
--interactive
Show what would be done and clean files interactively. See “Interactive mode” for details.
-n
--dry-run
Don’t actually remove anything, just show what would be done.
-q
--quiet
Be quiet, only report errors, but not the files that are successfully removed.
-e <pattern>
--exclude=<pattern>
Use the given exclude pattern in addition to the standard ignore rules (see gitignore(5)).
-x
Don’t use the standard ignore rules (see gitignore(5)), but still use the ignore rules given with -e options from the command line. This allows removing all untracked files, including build products. This can be used (possibly in conjunction with git restore or git reset) to create a pristine working directory to test a clean build.
-X
Remove only files ignored by Git. This may be useful to rebuild everything from scratch, but keep manually created files.
解决冲突
- 先用vi编辑冲突文件
- 使用
git add {file_name}
添加修改后的文件到暂存区 - 提交冲突文件,
git commit -m "resolve conflict"
- 推送到远程仓库
git push -u origin develop
git fork后如何同步源仓库更新
原文:http://www.cnblogs.com/leisurelylicht/p/Git-fork-hou-ru-he-tong-bu-yuan-cang-ku-geng-xin.html
1. 设置源仓库的远程地址
>> git remote add [新地址名称] [源仓库远程地址]
>> git remote add upstream https://github.com/leisurelicht/wtfpython-cn
2. 同步fork
>> git fetch [新地址名称]
>> git fetch upstream
3. 本地切换到想要更新的分支上
>> git checkout [branch]
>> git checkout develop
4. 把源仓库的远程分支合并到本地
>> git merge [新地址名称/分支]
>> git merge upstream/develop
5. 更新到自己的远程库上
>> git push origin develop
提交日志规范
feature: 功能添加
bugfix: bug修复
change: 调整,比如配置,某些方法替换等
optimize: 优化过程
doc: 文档变更
refactor: 重构,功能不变
tests: 测试代码的调整
merge:分支合并
delete:分支删除
假如既添加了功能又优化了过程
Feature(optimize): 添加了××××功能;同时优化了××××功能。
常见报错处理
Git :fatal: refusing to merge unrelated histories解决
git pull origin master --allow-unrelated-histories
Git解决Filename too long的问题
git有可以创建4096长度的文件名,然而在windows最多是260,因为git用了旧版本的windows api,为此踩了个坑。
解决方式是:
git config --global core.longpaths true
git拉取代码报错: SSL certificate problem: self signed certificate
提示信息为SSL认证失败,可以关闭SSL的认证,执行如下命令,然后重新拉取即可。
git config --global http.sslVerify false
附录
1. 常用命令示意图
2. .gitignore
文件示例
# maven ignore
target/
*.jar
!.mvn/wrapper/*
*.war
*.zip
*.tar
*.tar.gz
# eclipse ignore
.settings/
.project
.classpath
# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db
*.orig
# idea ignore
.idea/
*.ipr
*.iws
.mymetadata
.checkstyle
.classpath
.project
.class
.war
.zip
.rar
*.iml
.settings/*
/indexes/*
/target/*
/src/main/webapp/WEB-INF/classes/*
/src/main/webapp/userfiles/*
/target/
# *.properties