We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Git是目前世界上最先进的分布式版本控制系统。
参考文章:
如何优雅地使用 Git - 掘金
Git提交历史的修改删除合并 - 掘金
直接执行git clean -d -fx即可。 可能很多人都不明白-d,-fx到底是啥意思, 其实git clean -d -fx表示:删除 一些 没有 git add 的 文件; git clean 参数 -n 显示将要删除的文件和目录; -x -----删除忽略文件已经对git来说不识别的文件 -d -----删除未被添加到git的路径中的文件 -f -----强制运行 git clean -n git clean -df git clean -f
git reflog //该指令输出详细的操作历史,包括提交,操作,修改等 修改注释 git commit --amend 或 git commit --amend -m "Fixes bug #42" gitk 字符集编码: git config --global gui.encoding utf-8 //在git GUI中使用UTF-8编码 配置 git config --global user.name "ihoey" # 设置git用户名 git config --global user.email "[email protected]" # 设置git邮箱 git config --global color.ui true # 为true是终端着色 git config --global alias.co checkout # 配置checkout的别名 git config --global alias.ci commit # 配置commit的别名 git config --global alias.cm commit # 配置commit的别名 git config --global alias.st status # 配置status的别名 git config --global alias.br branch # 配置branch的别名 git config --global alias.cp cherry-pick # 配置cherry-pick的别名 git config --global alias.rb rebase # 配置rebase的别名 git config --global core.editor "mate -w" # 设置Editor使用textmate git config -l # 列举所有配置 #用户的git配置文件~/.gitconfig SSH 秘钥 ssh-keygen -t rsa -C "[email protected]" # 连续3个回车。如果不需要密码的话。 # 最后得到了两个文件:id_rsa和id_rsa.pub,在~/.ssh/文件夹下面 # id_rsa为你的私钥,不可以告诉别人 # id_rsa.pub为你的公钥,一般会放在你的服务器做ssh登录,或者放在github上面 基本命令 创建git仓库 git init 添加文件到暂存区 git add fileName / git add . 提交文件到仓库 git commit -m "版本提交信息" 查看文件提交状态 git status 查看文件修改的信息 git diff readme.txt git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id git checkout -- <file> # 抛弃工作区修改 git checkout . # 抛弃工作区修改 git add <file> # 将工作文件修改提交到本地暂存区 git add . # 将所有修改过的工作文件提交暂存区 git rm <file> # 从版本库中删除文件 git rm <file> --cached # 从版本库中删除文件,但不删除文件 git reset <file> # 从暂存区恢复到工作文件 git reset -- . # 从暂存区恢复到工作文件 git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改 git reset SHA1 ID # 恢复指定提交 git commit -m "some comments" git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象 git revert HEAD # 恢复最后一次提交的状态 查看文件 git diff <file> # 比较当前文件和暂存区文件差异 git diff git diff <$id1> <$id2> # 比较两次提交之间的差异 git diff <branch1>..<branch2> # 在两个分支之间比较 git diff --staged # 比较暂存区和版本库差异 git diff --cached # 比较暂存区和版本库差异 git diff --stat # 仅仅比较统计信息 查看提交记录 git log git log <file> # 查看该文件每次提交记录 git log -p <file> # 查看每次详细修改内容的diff git log -p -2 # 查看最近两次详细修改内容的diff git log --stat # 查看提交统计信息 分支管理 git branch -l # 查看本地分支 git branch -r # 查看远程分支 git branch <new_branch> # 创建新的分支 git branch -v # 查看各个分支最后提交信息 git branch --merged # 查看已经被合并到当前分支的分支 git branch --no-merged # 查看尚未被合并到当前分支的分支 git checkout <branch> # 切换到某个分支 git checkout -b <new_branch> # 创建新的分支,并且切换过去 git checkout -b <new_branch> <branch> # 基于branch创建新的new_branch git checkout $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除 git checkout $id -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支 git branch -d <branch> # 删除某个分支 git branch -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制) 强行切换分支 git checkout -f branch_name 强制checkout分支覆盖本地文件 git checkout -f branchname 分支合并和rebase git merge <branch> # 将branch分支合并到当前分支 git merge --no-ff <branch> # 不要Fast-Foward合并,这样可以生成merge提交 git rebase master <branch> # 将master rebase到branch,相当于: git checkout <branch> && git rebase master && git checkout master && git merge <branch>
Git暂存管理 git stash # 暂存 git stash pop # 恢复暂存 git stash list # 列所有stash git stash apply # 恢复暂存的内容 git stash drop # 删除暂存区 git stash(gsta):将所有暂存区的文件移动到“储藏区”,类似于另一种类型的工作区 git stash list:查看储藏队列(Stash lists) git stash apply:将最近一次储藏恢复到暂存区(可以用类似 git stash apply stash@{num}(num从0开始计数) 的命令来使用在队列中的任意一个储藏(stashes)) git stash clear:清空储藏队列 git stash save "name of the stash":为储藏设置命名 git stash pop(gstp):将最近一次储藏恢复到暂存区并从储藏队列删除此储藏 git stash drop(gstd):从储藏队列删除最近一次储藏(stash@{0})(git stash drop stash@{num} 从储藏队列删除指定储藏) 远程分支管理 git pull # 抓取远程仓库所有分支更新并合并到本地 git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并 git fetch origin # 抓取远程仓库更新 git merge origin/master # 将远程主分支合并到本地当前分支 git checkout --track origin/branch # 跟踪某个远程分支创建相应的本地分支 git checkout -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上 git push # push所有分支 git push origin master # 将本地主分支推到远程主分支 git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库) git push origin <local_branch> # 创建远程分支, origin是远程仓库名 git push origin <local_branch>:<remote_branch> # 创建远程分支 git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支 git删除远程分支 git push origin :branch-name //origin前面必须有空格,表示push一个空分支到远程分支,即可删除远程分支。注意:这个操作需要拥有force push的权限 清空git暂存区 git reset HEAD //可以清空之前git add 的内容 Git远程仓库管理 git remote -v # 查看远程服务器地址和仓库名称 git remote show origin # 查看远程服务器仓库状态 git remote add origin [email protected]:ihoey/blog.git # 添加远程仓库地址 git remote set-url origin [email protected]:ihoey/blog.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm <repository> # 删除远程仓库 创建远程仓库 git clone --bare ihoey.com blog.git # 用带版本的项目创建纯版本仓库 scp -r my_blog.git [email protected]:~ # 将纯仓库上传到服务器上 mkdir blog.git && cd blog.git && git --bare init # 在服务器创建纯仓库 git push -u origin master # 客户端首次提交 git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track git remote set-head origin master # 设置远程仓库的HEAD指向master分支 设置跟踪远程库和本地库 git branch --set-upstream master origin/master #master git branch --set-upstream develop origin/develop #develop 其他命令 mkdir XX #(创建一个空目录 XX指目录名) pwd #显示当前目录的路径。 cat XX #查看XX文件内容 rm XX #删除文件
命令别名设置:
gitk --all & //打开git 图形化界面 git fetch --all //刷新工作区 git remote -v //查看远端地址 git checkout -b dbg_master -t origin/master //基于远端master分支创建dbg_master分支 git merge --squash <branch>:将多次提交合并成一个,然后git add .;git commit -m "XXXXX";git push origin XXXX... git push # push所有分支 git push origin master # 将本地主分支推到远程主分支 git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库) git push origin <local_branch> # 创建远程分支, origin是远程仓库名 git push origin local-branch #将当前local-branch 分支推送一个远程local-branch分支,本地分支和远程分支同名 git push origin <local_branch>:<remote_branch> # 创建远程分支,将local_branch代码推送到remote_branch分支 git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支 对最近一次commit的进行修改:git commit -a –amend Git pull 强制覆盖本地文件 git fetch --all git reset --hard origin/master git pull git remote add origin https://git.oschina.net/duandaoke/os.git要求服务已经建立同名仓库 git remote # 显示远程仓库 git remote -v # 显示远程仓库详情 git remote show origin # 显示 origin 远程库的详情 rebase的冲突解决 解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存) git add -u //注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。 然后执行下面命令继续rebase: git rebase --continue //有冲突继续解决,重复这这些步骤,直到rebase完成。 如果中间遇到某个补丁不需要应用,可以用下面命令忽略: git rebase --skip 如果想回到rebase执行之前的状态,可以执行: git rebase --abort //放弃rebase 注:rebase之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。 cherry-pick的冲突解决 解决完一个补丁应用的冲突后,执行下面命令标记冲突已解决(也就是把修改内容加入缓存) git add -u //注:-u 表示把所有已track的文件的新的修改加入缓存,但不加入新的文件。 然后执行下面命令继续rebase: git cherry-pick --continue //有冲突继续解决,重复这这些步骤,直到cherry-pick完成。 如果中间遇到某个补丁不需要应用,可以用下面命令忽略: git cherry-pick --skip 如果想回到rebase执行之前的状态,可以执行: git cherry-pick --abort //放弃cherry-pick 注:cherry-pick之后,不需要执行commit,也不存在新的修改需要提交,都是git自动完成。 手动编辑冲突的文件,使其内容和master_mlc分支上的内容一致, 然后git add此文件,最后执行git cherry-pick –continue即可。 1、git删除远程分支 git push origin :branch-name //origin前面必须有空格,表示push一个空分支到远程分支,即可删除远程分支。注意:这个操作需要拥有force push的权限 2、清空git暂存区 git reset HEAD //可以清空之前git add 的内容 git clean命令用来从你的工作目录中删除所有没有tracked过的文件. git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以需要clean来删除没有track过的文件. 结合使用这两个命令能让你的工作目录完全回到一个指定的<commit>的状态. 用法 删除当前目录下没有被track过的文件和文件夹. git clean -xf 下面的例子要删除所有工作目录下面的修改, 包括新添加的文件. 假设你已经提交了一些快照了, 而且做了一些新的开发. git reset --hard git clean -df 运行后, 工作目录和缓存区回到最近一次commit时候一摸一样的状态, git status会告诉你这是一个干净的工作目录, 又是一个新的开始了. git config --global gui.encoding utf-8 //在git GUI中使用UTF-8编码 //git 回滚到之前某一commit git reset –hard 8ff24a6803173208f3e606e32dfcf82db9ac84d8 在使用Git的时候,经过几次提交后,发现需要回退到早些时候的状态.例如: 7edb8524a xxxxxxxxxxxxxxxxxx 83dae5691 xxxxxxxxxxxxxxxxxx 45eadd642 xxxxxxxxxxxxxxxxxx 657834ade xxxxxxxxxxxxxxxxxx 假设现在处于7edb8524a 状态,现在我想回退到657834ade时的状态,此时可以 git reset –hard 7edb8524a 然后 git reset –soft 657834ade 会将之间的修改全部进行revert,然后在进行add commit操作就行了. 另外权限足够的话,可以从657834ade 拉一个分支出来,然后将远程分支 删除,再将拉出来的分支push到远程仓库上,成为原来的分支,也可以实现回退到 657834ade 的目的.此方法不会保留中间的各种修改信息和状态. 根据–soft –mixed –hard,会对working tree和index和HEAD进行重置: git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息 git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可 git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容 已经push 对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令 revert git revert用于反转提交,执行evert命令时要求工作树必须是干净的. git revert用一个新提交来消除一个历史提交所做的任何修改. revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题) revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看. git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61 通常,前几位即可 git revert c011eb3 git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit 看似达到的效果是一样的,其实完全不同.
合理的命令别名设置可以大大减少输入,有助于提高工作效率,建议遵守下述别名设置:
git config --global alias.ci commit git config --global alias.co checkout git config --global alias.st status git config --global alias.rb rebase git config --global alias.ll “log --oneline --decorate --color” git config --global alias.lc “log --graph --color”
正确的回车换行设置,避免 Unix 和 Windows 下开发的回车换行的转换问题。
(Windows 下) git config --global core.autocrlf true git config --global core. safecrlf warn (Linux 下) git config --global core.autocrlf input git config --global core. safecrlf warn
基本命令
git config --global user.name "Your Name" git config --global user.email "[email protected]" git config --global core.editor <your favorite editor here> Ex: git config --global core.editor vim git init:初始化一个repo,初始化本地git仓库(创建新仓库)
Commit 结构
git status(gst):查看 repo 状态 工作区: .git 目录 暂存区 工作目录
git add <filename>(ga):添加一个文件到暂存区 git add .(gaa):添加所有文件到暂存区 git add *.js:添加所有后缀为js的文件到暂存区 git rm --cached <file>:从暂存区删除一个新文件 git commit -m "My first commit"(gcmsg):创建一次带 message 的提交 git commit -v -a(gca): -v是 verbose 的缩写,会在底部显示差异信息和更多有意义的信息 -a 类似于 git add .,会添加所有被修改和删除的文件,但会忽略新创建的文件 git help <command>:查看对应命令的帮助手册 git log(glg,glgg,glo, glog):查看项目的提交历史
暂存区管理
git reset HEAD <filename>(grh):从暂存区删除一个被修改的文件 git reset HEAD(grh):从暂存区删除所有被修改的文件 git checkout <filename>(gco):从暂存区删除一个被修改的文件,并撤销文件的更改 // git checkout . git commit -m "My first commit" --amend:添加文件/更改在暂存区的最后一次提交 git commit -v -a --amend(gca!):添加文件/更改在暂存区的最后一次提交 .gitignore:告诉git,哪些文件不被加入版本跟踪 可以使用 git add <filename> -f 命令添加一个不被版本跟踪的文件 git diff <filename>(gd):查看基于当前文件的最后一次提交的更改差异 git diff (gd):查看基于所有文件的最后一次提交的更改差异 git reset HEAD~2 --soft:从项目提交历史中删除最近两次提交,但不丢弃文件的更改 git reset HEAD~2 --hard:从项目提交历史中删除最近两次提交,但会丢弃文件的更改和在(最后两次)提交中创建的新文件 git reset <commit> --soft --hard: --soft:将所有被更改的文件回溯到“待提交”状态 --hard:commit 之后,对被git追踪的文件的任何更改都被丢弃 git reflog:显示包括"被撤销"在内的所有提交 git merge <commit hash>:重新提交(restore the commit) git clean -f:删除工作目录中不被git进行版本追踪的文件
Stashed & BranchesStash
git stash(gsta):将所有暂存区的文件移动到“储藏区”,类似于另一种类型的工作区 git stash list:查看储藏队列(Stash lists) git stash apply:将最近一次储藏恢复到暂存区(可以用类似 git stash apply stash@{num}(num从0开始计数) 的命令来使用在队列中的任意一个储藏(stashes)) git stash clear:清空储藏队列 git stash save "name of the stash":为储藏设置命名 git stash pop(gstp):将最近一次储藏恢复到暂存区并从储藏队列删除此储藏 git stash drop(gstd):从储藏队列删除最近一次储藏(stash@{0})(git stash drop stash@{num} 从储藏队列删除指定储藏)
Branch
git checkout -b dev(gco):创建 dev 分支并从当前分支切换到 dev 分支 // git checkout -b dbg_master -t origin/master //基于master分支创建dbg_master分支 git branch(gb):查看所有分支 git checkout master(gcm):切换到主分支 git merge <branch>(gm):合并分支 git rebase master:先将 master 上的更改合并到当前分支,再添加当前分支的更改。如果有冲突,解决冲突后加 --continue 参数继续合并 git branch -d <branch>: 删除分支,-D 则强制删除分支 git merge <branch> --squash:将多次提交合并成一个,其流程如下: # Go to the `master` branch git checkout master # Create a temp branch git checkout -b temp # Merge the feature/x branch into the temp using --squash git merge feature/x --squash # See the new modifications/files in the Staging Area git status # Create the unified commit git commit -m "Add feature/x" # Delete the feature/x branch git branch -D feature/x
rebase 和 merge 的区别:
rebase: 提交历史(的展示)是线性的 缺点:会删除最近一个 commit,然后创建一次新的 commit 如果已提交到远程,不要使用 rebase
merge: 提交历史(的展示)是分叉的 对于两个分支的合并,会创建一个次新的 commit
远程仓库管理
git remote add <name> <url>:添加一个将被追踪的远程仓库 git remote rm <name>:移除一个远程仓库 git push <remote> <remote-branch>(gp,ggp):将当前分支的本地 commit 推送到远程仓库 git fetch <remote> <remote-branch>:拉取远程仓库的最新 commit 到当前(本地)分支(<remote>/<branch>),不会合并 git pull <remote> <remote-branch>(gl,ggl):拉取远程仓库的最新 commit 到当前(本地)分支,并自动 merge git pull --rebase(gup):以 rebase 的方式进行合并,而不是 merge
其它有用的命令
git tag <name>:创建一个 tag(如:v1.3) git push --tags:将本地 tags 推送到远程仓库 git push <tag>:推送指定的本地 tag 到远程 展示帮助信息 git help -g 回到远程仓库的状态 抛弃本地所有的修改,回到远程仓库的状态。 git fetch --all && git reset --hard origin/master 重设第一个commit 也就是把所有的改动都重新放回工作区,并清空所有的commit,这样就可以重新提交第一个commit了 git update-ref -d HEAD 展示工作区和暂存区的不同 输出工作区和暂存区的different(不同)。 git diff 还可以展示本地仓库中任意两个commit之间的文件变动: git diff <commit-id> <commit-id> 展示暂存区和最近版本的不同 输出暂存区和本地最近的版本(commit)的different(不同)。 git diff --cached 展示暂存区、工作区和最近版本的不同 输出工作区、暂存区 和本地最近的版本(commit)的different(不同)。 git diff HEAD 快速切换分支 git checkout - 删除已经合并到master的分支 git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d 展示本地分支关联远程仓库的情况 git branch -vv 关联远程分支 关联之后,git branch -vv就可以展示关联的远程分支名了,同时推送到远程仓库直接:git push,不需要指定远程仓库了。 git branch -u origin/mybranch 或者在push时加上-u参数 git push origin/mybranch -u 列出所有本地分支 -l参数相当于:local git branch -l 列出所有远程分支 -r参数相当于:remote git branch -r 列出本地和远程分支 -a参数相当于:all git branch -a 创建并切换到本地分支 git checkout -b <branch-name> 创建并切换到远程分支 git checkout -b <branch-name> -t origin/<branch-name> 删除本地分支 git branch -d <local-branchname> 删除远程分支 git push origin --delete <remote-branchname> 或者 git push origin :<remote-branchname> 重命名本地分支 git branch -m <new-branch-name> git branch -m <oldbranchname> <newbranchname>:尝试修改 git branch -M <oldbranchname> <newbranchname>:强制修改 查看标签 git tag 展示当前分支的最近的tag git describe --tags --abbrev=0 本地创建标签 git tag <version-number> 默认tag是打在最近的一次commit上,如果需要指定commit打tag: $ git tag -a <version-number> -m "v1.0 发布(描述)" <commit-id> 推送标签到远程仓库 首先要保证本地创建好了标签才可以推送标签到远程仓库: git push origin <local-version-number> 一次性推送所有标签,同步到远程仓库: git push origin --tags 删除本地标签 git tag -d <tag-name> 删除远程标签 删除远程标签需要先删除本地标签,再执行下面的命令: git push origin :refs/tags/<tag-name> 切回到某个标签 一般上线之前都会打tag,就是为了防止上线后出现问题,方便快速回退到上一版本。下面的命令是回到某一标签下的状态: git checkout -b branch_name tag_name 放弃工作区的修改 git checkout <file-name> 放弃所有修改: git checkout . 恢复删除的文件 git rev-list -n 1 HEAD -- <file_path> #得到 deleting_commit git checkout <deleting_commit>^ -- <file_path> #回到删除文件 deleting_commit 之前的状态 回到某一个commit的状态,并重新增添一个commit //回退,有记录 git revert <commit-id> 回到某个commit的状态,并删除后面的commit 和revert的区别:reset命令会抹去某个commit id之后的所有commit git reset <commit-id> 修改上一个commit的描述 git commit --amend 查看commit历史 git log 查看某段代码是谁写的 blame的意思为‘责怪’,你懂的。 git blame <file-name> 显示本地执行过git命令 就像shell的history一样 git reflog 修改作者名 git commit --amend --author='Author Name <[email protected]>' 修改远程仓库的url git remote set-url origin <URL> 增加远程仓库 git remote add origin <remote-url> 列出所有远程仓库 git remote // git remote -v 查看两个星期内的改动 git whatchanged --since='2 weeks ago' 把A分支的某一个commit,放到B分支上 这个过程需要cherry-pick命令,参考 git checkout <branch-name> && git cherry-pick <commit-id> 给git命令起别名 简化命令 git config --global alias.<handle> <command> 比如:git status 改成 git st,这样可以简化命令 git config --global alias.st status 存储当前的修改,但不用提交commit 详解可以参考廖雪峰老师的git教程 git stash 保存当前状态,包括untracked的文件 untracked文件:新建的文件 git stash -u 展示所有stashes git stash list 回到某个stash的状态 git stash apply <stash@{n}> 回到最后一个stash的状态,并删除这个stash git stash pop 删除所有的stash git stash clear 从stash中拿出某个文件的修改 git checkout <stash@{n}> -- <file-path> 展示所有tracked的文件 git ls-files -t 展示所有untracked的文件 git ls-files --others 展示所有忽略的文件 git ls-files --others -i --exclude-standard 强制删除untracked的文件 可以用来删除新建的文件。如果不指定文件文件名,则清空所有工作的untracked文件。clean命令,注意两点: clean后,删除的文件无法找回 不会影响tracked的文件的改动,只会删除untracked的文件git clean <file-name> -f 强制删除untracked的目录 可以用来删除新建的目录,注意:这个命令也可以用来删除untracked的文件。详情见上一条 git clean <directory-name> -df 展示简化的commit历史 git log --pretty=oneline --graph --decorate --all 把某一个分支到导出成一个文件 git bundle create <file> <branch-name> 从包中导入分支 新建一个分支,分支内容就是上面git bundle create命令导出的内容 git clone repo.bundle <repo-dir> -b <branch-name> 执行rebase之前自动stash git rebase --autostash 从远程仓库根据ID,拉下某一状态,到本地分支 git fetch origin pull/<id>/head:<branch-name> 详细展示一行中的修改 git diff --word-diff 清除gitignore文件中记录的文件 git clean -X -f 展示所有alias和configs 注意: config分为:当前目录(local)和全局(golbal)的config,默认为当前目录的config git config --local --list (当前目录) git config --global --list (全局) 展示忽略的文件 git status --ignored commit历史中显示Branch1有的,但是Branch2没有commit git log Branch1 ^Branch2 在commit log中显示GPG签名 git log --show-signature 删除全局设置 git config --global --unset <entry-name> 新建并切换到新分支上,同时这个分支没有任何commit 相当于保存修改,但是重写commit历史 git checkout --orphan <branch-name> 展示任意分支某一文件的内容 git show <branch-name>:<file-name> clone下来指定的单一分支 git clone -b <branch-name> --single-branch https://github.com/user/repo.git 忽略某个文件的改动 关闭 track 指定文件的改动,也就是 Git 将不会在记录这个文件的改动 git update-index --assume-unchanged path/to/file 恢复 track 指定文件的改动 git update-index --no-assume-unchanged path/to/file 忽略文件的权限变化 不再将文件的权限变化视作改动 git config core.fileMode false 展示本地所有的分支的commit 最新的放在最上面 git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/ 在commit log中查找相关内容 通过grep查找,given-text:所需要查找的字段 git log --all --grep='<given-text>' 把暂存区的指定file放到工作区中 git reset <file-name> 强制推送 git push -f <remote-name> <branch-name>列出所有远程分支 -r参数相当于:remote git branch -r 更新到本地 # 源 + 分支名 git pull origin master
初始化本地git仓库(创建新仓库)
git init # 初始化 git 项目 git init 安装好 Git 之后,配置你的资料: # 配置用户名 git config --global user.name "Your Real Name" # 配置邮箱地址 git config --global user.email [email protected]
配置用户名
git config --global user.name "xxx"
配置邮件
git config --global user.email "[email protected]"
git status等命令自动着色
git config --global color.ui true git config --global color.status auto git config --global color.diff auto git config --global color.branch auto git config --global color.interactive auto
clone远程仓库
git clone git+ssh://[email protected]/VT.git
查看当前版本状态(是否修改)
git status
添加xyz文件至index
git add xyz
增加当前子目录下所有更改过的文件至index
git add .
提交
git commit -m 'xxx'
合并上一次提交(用于反复修改)
git commit --amend -m 'xxx'
将add和commit合为一步
git commit -am 'xxx'
删除index中的文件
git rm xxx
递归删除
git rm -r *
显示提交日志
git log
显示1行日志 -n为n行
git log -1
git log -5
显示提交日志及相关变动文件
git log --stat
git log -p -m
显示某个提交的详细内容
git show dfb02e6e4f2f7b573337763e5c0013802e392818
可只用commitid的前几位
git show dfb02
显示HEAD提交日志
git show HEAD
显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本
git show HEAD^
显示已存在的tag
git tag
增加v2.0的tag
git tag -a v2.0 -m 'xxx'
显示v2.0的日志及详细内容
git show v2.0
显示v2.0的日志
git log v2.0
显示所有未添加至index的变更
git diff
显示所有已添加index但还未commit的变更
git diff --cached
比较与上一个版本的差异
git diff HEAD^
比较与HEAD版本lib目录的差异
git diff HEAD -- ./lib
比较远程分支master上有本地分支master上没有的
git diff origin/master..master
只显示差异的文件,不显示具体内容
git diff origin/master..master --stat
增加远程定义(用于push/pull/fetch)
git remote add origin git+ssh://[email protected]/VT.git
显示本地分支
git branch
显示包含提交50089的分支
git branch --contains 50089
显示所有分支
git branch -a
显示所有原创分支
git branch -r
显示所有已合并到当前分支的分支
git branch --merged
显示所有未合并到当前分支的分支
git branch --no-merged
本地分支改名
git branch -m master master_copy
从当前分支创建新分支master_copy并检出
git checkout -b master_copy
上面的完整版
git checkout -b master master_copy
检出已存在的features/performance分支
git checkout features/performance
检出远程分支hotfixes/BJVEP933并创建本地跟踪分支
git checkout --track hotfixes/BJVEP933
检出版本v2.0
git checkout v2.0
从远程分支develop创建新本地分支devel并检出
git checkout -b devel origin/develop
检出head版本的README文件(可用于修改错误回退)
git checkout -- README
合并远程master分支至当前分支
git merge origin/master
合并提交ff44785404a8e的修改
git cherry-pick ff44785404a8e
将当前分支push到远程master分支
git push origin master
删除远程仓库的hotfixes/BJVEP933分支
git push origin :hotfixes/BJVEP933
把所有tag推送到远程仓库
git push --tags
获取所有远程分支(不更新本地分支,另需merge)
git fetch
获取所有原创分支并清除服务器上已删掉的分支
git fetch --prune
获取远程分支master并merge到当前分支
git pull origin master
重命名文件README为README2
git mv README README2
将当前版本重置为HEAD(通常用于merge失败回退)
git reset --hard HEAD
git rebase
删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支)
git branch -d hotfixes/BJVEP933
强制删除分支hotfixes/BJVEP933
git branch -D hotfixes/BJVEP933
列出git index包含的文件
git ls-files
图示当前分支历史
git show-branch
图示所有分支历史
git show-branch --all
显示提交历史对应的文件修改
git whatchanged
撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818
git revert dfb02e6e4f2f7b573337763e5c0013802e392818
内部命令:显示某个git对象
git ls-tree HEAD
内部命令:显示某个ref对于的SHA1 HASH
git rev-parse v2.0
显示所有提交,包括孤立节点
git reflog
git show HEAD@{5}
显示master分支昨天的状态
git show master@{yesterday}
图示提交日志
git log --pretty=format:'%h %s' --graph git show HEAD~3 git show -s --pretty=raw 2be7fcb476
暂存当前修改,将所有至为HEAD状态
git stash
查看所有暂存
git stash list
参考第一次暂存
git stash show -p stash@{0}
应用第一次暂存
git stash apply stash@{0}
文件中搜索文本“delete from”
git grep "delete from" git grep -e '#define' --and -e SORT_DIRENT git gc git fsck
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Git是目前世界上最先进的分布式版本控制系统。
参考文章:
如何优雅地使用 Git - 掘金
GIT 常见命令学习整理
GIT常用命令备忘
Git远程操作详解
一篇文章,教你学会Git
如何在 Git 中使用撤消操作
git使用中碰到的问题,持续更新
Git 的 4 个阶段的撤销更改
Git提交历史的修改删除合并 - 掘金
IDEA中分支切换error: The following untracked working tree files would be overwritten by checkout
命令别名设置:
合理的命令别名设置可以大大减少输入,有助于提高工作效率,建议遵守下述别名设置:
正确的回车换行设置,避免 Unix 和 Windows 下开发的回车换行的转换问题。
基本命令
Commit 结构
暂存区管理
Stashed & BranchesStash
Branch
rebase 和 merge 的区别:
rebase:
提交历史(的展示)是线性的
缺点:会删除最近一个 commit,然后创建一次新的 commit
如果已提交到远程,不要使用 rebase
merge:
提交历史(的展示)是分叉的
对于两个分支的合并,会创建一个次新的 commit
远程仓库管理
其它有用的命令
初始化本地git仓库(创建新仓库)
配置用户名
配置邮件
git status等命令自动着色
clone远程仓库
查看当前版本状态(是否修改)
添加xyz文件至index
增加当前子目录下所有更改过的文件至index
提交
合并上一次提交(用于反复修改)
将add和commit合为一步
删除index中的文件
递归删除
显示提交日志
显示1行日志 -n为n行
git log -5
显示提交日志及相关变动文件
git log -p -m
显示某个提交的详细内容
可只用commitid的前几位
显示HEAD提交日志
显示HEAD的父(上一个版本)的提交日志 ^^为上两个版本 ^5为上5个版本
显示已存在的tag
增加v2.0的tag
显示v2.0的日志及详细内容
显示v2.0的日志
显示所有未添加至index的变更
显示所有已添加index但还未commit的变更
比较与上一个版本的差异
比较与HEAD版本lib目录的差异
比较远程分支master上有本地分支master上没有的
只显示差异的文件,不显示具体内容
增加远程定义(用于push/pull/fetch)
显示本地分支
显示包含提交50089的分支
显示所有分支
显示所有原创分支
显示所有已合并到当前分支的分支
显示所有未合并到当前分支的分支
本地分支改名
从当前分支创建新分支master_copy并检出
上面的完整版
检出已存在的features/performance分支
检出远程分支hotfixes/BJVEP933并创建本地跟踪分支
检出版本v2.0
从远程分支develop创建新本地分支devel并检出
检出head版本的README文件(可用于修改错误回退)
合并远程master分支至当前分支
合并提交ff44785404a8e的修改
将当前分支push到远程master分支
删除远程仓库的hotfixes/BJVEP933分支
把所有tag推送到远程仓库
获取所有远程分支(不更新本地分支,另需merge)
获取所有原创分支并清除服务器上已删掉的分支
获取远程分支master并merge到当前分支
重命名文件README为README2
将当前版本重置为HEAD(通常用于merge失败回退)
git rebase
删除分支hotfixes/BJVEP933(本分支修改已合并到其他分支)
强制删除分支hotfixes/BJVEP933
列出git index包含的文件
图示当前分支历史
图示所有分支历史
显示提交历史对应的文件修改
撤销提交dfb02e6e4f2f7b573337763e5c0013802e392818
内部命令:显示某个git对象
内部命令:显示某个ref对于的SHA1 HASH
显示所有提交,包括孤立节点
git show HEAD@{5}
显示master分支昨天的状态
图示提交日志
暂存当前修改,将所有至为HEAD状态
查看所有暂存
参考第一次暂存
应用第一次暂存
文件中搜索文本“delete from”
The text was updated successfully, but these errors were encountered: