Git常用命令参考手册

Git常用命令参考手册

整理了一篇git常用的命令参考手册,命令顺序按照一个项目从头到尾的常用命令顺序做了排序,后续会继续完善内容示例并补全其他命令使用说明,希望对不熟悉的小伙伴有所帮助。

git config

shell 复制代码
# 配置列表
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

bash 复制代码
#创建本地分支
git checkout -b localbranch

# 指定local分支名字sf
git checkout -b localBranchName origin/serverfix

# 自动创建remote同名分支,并track
git checkout --track origin/serverfix

git branch

bash 复制代码
# 查看本地和远程所有分支
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

bash 复制代码
#添加全部文件到暂存区
git add .

git commit

#提交代码 
git commit -m '提交日志描述'

git stash - 暂存与恢复

bash 复制代码
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

bash 复制代码
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

创建一个新目录做为仓库,并推送到远程仓库

bash 复制代码
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

初始化已存在的目录做为仓库,并推送到远程仓库

bash 复制代码
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

推送一个已存在的本地仓库到远程仓库

bash 复制代码
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 - 合并分支

bash 复制代码
git checkout master  //切换到master分支
git merge hotfix  //将hotfix分支上的修改合并到master分支上

git cherry-pick - 合并指定提交

将一个分支上的某个commit合并到另一个分支,可用使用cherry-pick命令实现。

比如:将dev分支上commit_id为f99f2b57b7ee72d55a08e699fbeec34cbac96cb8的提交合并到⇨master分支:

bash 复制代码
# 1)切换到master分支:
git checkout master

# 2)执行cherry-pick命令:
git cherry-pick f99f2b57b7ee72d55a08e699fbeec34cbac96cb8

3)推送到远程master仓库:
git push

注意master上新的commit id与dev上的id并不相同,即只是将dev上的修改拷贝过来作为一个新的提交。

git reset

bash 复制代码
#将本地代码重置为远端仓库版本
git reset --hard origin/develop

git alias - 命令别名

bash 复制代码
$ 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中使用,会提示系统找不到指定的文件

bash 复制代码
$ 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"

效果:

bash 复制代码
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 - 远程仓库管理

shell 复制代码
# 查看关联的远程仓库
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

修改关联的远程仓库

方法一 通过命令直接修改远程地址

bash 复制代码
进入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

如果修改远程关联的仓库后,需要推送代码,可以执行

bash 复制代码
git push -u origin --all
或
git push -u origin --tags

git关联本地仓库与远程仓库

bash 复制代码
#查看本地关联的远程仓库
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 - 清除文件

bash 复制代码
git checkout . && git clean -xdf

参数说明:

shell 复制代码
-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.

解决冲突

  1. 先用vi编辑冲突文件
  2. 使用git add {file_name}添加修改后的文件到暂存区
  3. 提交冲突文件,git commit -m "resolve conflict"
  4. 推送到远程仓库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

bash 复制代码
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解决

bash 复制代码
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
相关推荐
蔚蓝色的风暴1 小时前
git基础(一):基本概念、工作流程
git
心肝到爆2 小时前
vue3项目最新eslint9+prettier+husky+stylelint+vscode配置
前端·javascript·vue.js·git·前端框架·node.js
杰哥的技术杂货铺5 小时前
mac解决 Unsupported Git Version 2.15.0 At least 2.17.0 is required
git·macos
Yubaibaioo14 小时前
Github提交Pull Request教程 & Git基础扫盲(零基础易懂)
git·github
陈善强19 小时前
git lfs 上传超大文件
git
前端 贾公子1 天前
POP3/SMTP服务、获取授权码(以QQ为例)
git·github
沉木渡香1 天前
[docker中首次配置git环境]
git·docker·容器
大乔乔布斯1 天前
git bash 一双击选中内容就^C (ctrl C)
git
kevinfkq2 天前
git安装与配置与相关命令
大数据·git·elasticsearch