Git常用命令与提交流程----简要快速入门
获取新项目
git clone <远程分支链接> [<本地文件夹名>]
git fetch
git checkout develop
git checkout -b <yourBranchName>
提交流程
注:这里写到的是最理想状态下的提交流程,实际情况下可能有所出入,注意常用git status
等语句查看当前状态
merge
git add [-u | -A]
git commit -m "<msg>"
git push origin <yourBranchName>
git checkout develop
git pull
-
git merge --no-ff origin/<yourBranchName> -m "<msg>"
----遇到冲突: 消解冲突后保存 ->git add -u
->git commit -m "fix conflict"
git push origin develop
git checkout -b <newBranchName>
*rebase->merge
rebase可以将其他分支上的更新合并到自己分支,并将自己分支上原有的提交作为补丁重现在分支末端. 我们用来将主分支上的最新更新合并到己分支上再执行提交合并到主分支操作以获得更清晰简介好看的git历史树形.
git add [-u | -A]
git commit -m "<msg>"
git push origin <yourBranchName>
git checkout develop
git pull
git checkout <yourBranchName>
-
git rebase develop
----遇到冲突: loop{ 消解冲突后保存 ->git add -u
->git rebase --continue
} git push origin <yourBranchName> --force-with-lease
git checkout develop
-
git merge --no-ff origin/<yourBranchName> -m "<msg>"
----遇到冲突: 消解冲突后保存 ->git add -u
->git commit -m "fix conflict"
git push origin develop
git checkout -b <newBranchName>
常用命令
注:"默认"指直接输入对应命令不加参数
-
git fetch
默认获取远程主机的更新
获取更新:$git fetch <远程主机名> <分支名>
例:$git fetch origin master
-
git pull
默认将当前分支在远程主机上的对应分支的更新合并到当前本地分支
取回远程主机某个分支的更新,再与本地的指定(默认当前)分支合并:
$git pull <远程主机名> <远程分支名>[:<本地分支名>]
-
git checkout -b:创建
切换到某分支:git checkout [-b] <branchName>
从远程分支拉取创建并切换到某分支:
git checkout -b <localBranch> origin/<remoteBranch>
-
git log -p:展示差异(diff) -num:指定最多查看历史条数,num为数字 --stat:列出修改的文件
默认按时间倒序查看当前分支提交历史
git log [-p] [-num] [--stat]
-
git branch -r:远程 -a:所有(本地和远程)
默认查看本地分支
查看分支:$git branch [-r | -a]
创建分支:$git branch <name>
删除分支:$git branch -d [-r] <name>
-
git status -s:缩略写法显示 -b:显示分支名
默认列出当前还没提交(commit)的修改
$git status [-s [-b]]
-
git add -u:所有除了新建操作外其他操作改动的文件 -A:包括新建的文件
将文件改动添加到暂存区以便提交
添加指定文件(夹):$git add <path>
添加改动过的文件(当前或指定路径下):$git add [-u | -A] [<path>]
-
git commit -a:自动将改动过的文件缓存并提交 -amend:合并上一次提交
默认将当前分支下暂存区内的所有文件改动提交(更新)到本地仓库
$git commit [-a | -amend] -m <本次提交的说明>
-
git push -f:推送强制覆盖
将本地更新推送到远程主机
$git push [-f | --force] <远程主机名> <本地分支名>[:<远程分支名>]
-
git merge --no-ff:执行正常合并,在当前分支上生成一个新节点(最好这样做,使树形节点更清晰)
将其他分支的提交合并到当前分支
$ git merge [--no-ff] [<远程主机名>] <分支名>
当前分支: A---M---B A---M---B / ====> / \ 其他分支: ---o---O---P---Q ---o---O---P---Q---R
-
git rebase
将其他分支的提交合并到当前分支,并将当前分支原来的提交的起点移动到分支末端
$ git rebase <分支名>
当前分支: A---M---B A---M---B / ====> / 其他分支: ---o---O---P---Q ---o---O---P---Q
-
git merge --squash
版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。
TODO
-
*git reset -q:安静回滚,只报告错误 --hard:强制回滚到指定版本(未指定则为最后一次提交),所有改动全部清除
回滚操作,慎用
git reset (--hard) [-q] [<版本号>]
-
git stash
默认将当前工作区中未暂存的改动存档起来以便读取复原
取出最近一次缓存改动复原到工作区:$git stash pop
丢弃最近一次缓存:$git stash drop
其他基础
设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
.gitignore 管理不参与提交的文件(夹)
-
*
忽略所有文件 -
*.js
忽略所有js后缀文件 -
.vscode/
忽略".vscode"文件夹下文件 -
!somefile
不忽略某文件 -
path/file
忽略指定路径下指定文件 -
.js[x]
忽略".js",".jsx"后缀的文件 -
.[oa]
忽略".o",".a"后缀的文件
通过符号 *!/[]
配合路径表示来筛选git是否跟踪文件的修改
解决冲突
<<<head
(这里是其他分支上的代码)
===
(这里是自己分支上的代码)
>>>>>
将冲突的代码人工判断整合, 若不是非常确定怎么修改,最好在sourcetree里查看代码提交的人然后两人协商解决, 不能直接覆盖别人的代码!
CRLF和LF
Dos和windows采用回车+换行CR/LF表示下一行,
而UNIX/Linux采用换行符LF表示下一行,
苹果机(MAC OS系统)也采用换行符LF表示下一行。(注:有些人认为Mac Style是CR,我查了一些资料,发现应该是这样的:老的Mac是CR,后来的OSX全部改成了LF)
CR用符号’\r’表示, LF使用’\n’符号表示。
摘自: 趣谈、浅析CRLF和LF
windows系统安装git时询问换行风格时注意不要选择自动修改为crlf. 因为我们文件统一换行风格是lf,且git自动转换换行符可能存在bug: 文件提交时并没有把crlf重新转换为lf.
若是不小心设置到也不要紧,在命令行中重新设置$ git config --global core.autocrlf false
即可
小tips
-
git config --global help.autocorrect 1
设置自动纠错.在git能识别的情况下自动修正打错的单词.双刃剑慎用. -
git diff --word-diff
Git 如果不做设置,默认的 diff 是按行去做的,这种 diff 的方式看起来并不是那么的直观,特别是如果你是在做代码的微调,行 diff 不是那么容易让你掌握到底改了东西。这时候可以加入参数--word-diff
即可按 "单词" 查差异(ps.对中文的支持貌似不是很好,待测试);
My {+good+} friend Tom [-recently-] gave an excellent talk
参考链接:
Git官方文档
Git Cheat Sheet 一些常用命令和说明(英文版)
Git Cheat Sheet ---- 阮一峰 直接列出常用命令和简略说明
Visual Git Cheat Sheet可以根据区域划分 直观查看不同git命令的作用来源以及作用对象, 哪里不会点哪里~
Git远程操作详解 ---- 阮一峰
Git教程 ---- 廖雪峰
网友评论