下载代码:
git clone ...
git help <command>查看帮助
从远程库更新代码
git pull
git pull <远程库名> <远程分支名>:<本地分支名> //如果不写本地分支,则与当前分支merge
如: git pull origin feature,则是将远程 feature 分支最新代码拉取合并到当前分支。本地的 feature不会更新。
提交代码
git staus -s 查看改动的文件, -s:精简模式
git add . 将改动加入到stage区域,即待提交状态
git commit -a -m'<comment>' 提交代码到本地仓库
git push origin master :将本地分支 master的改动提交到 origin 远程库上
git diff 查看所有改动的文件包含的更改行
git diff branch1 branch2 可以查看2个分支不同的代码
回退
git状态请查看“文件状态”一节。
#### 1)撤消改过的未commit文件(unstaged),
git checkout -- 效果与 git status 类似,查看与最新提交的差异
git checkout -- <file> 撤消指定文件的更改(支持正则表达式)
git checkout -- src/java/* 撤消某个目录下所有的更改
#### 2)撤消 commit (staged)
git reset <commit_id> : commit_id 可以通过 git log查到
git reset HEAD^ : 回退最后一个commit。^相当于 HEAD~1,即HEAD减一个版本
注:reset默认是 --mixed,即回退到unstaged 的状态。--soft表示回退到staged状态
#### 3)撤消untracked file/directory。也即删除未被追踪的文件
git clean -n 查看有哪些 untracked 文件可以删除
git clean -xfd 删除所有 untracke f:文件 d:目录 x:即使在.gitignore内。此语句不能随便执行!!会删除很多东西,如.iml等
最好的方法是文件系统逐个删除!
查看信息
git log 查看提交历史
分支
git branch 查看当前处于哪个分支
git checkout <bracn_name> 切换分支
git checkout -b <bracn_name> 创建并切换分支
切换分支之前,必须commit或stash,不然改动会被删除。经测试,最新版本不会删除改动,而是直接将改动合到分支。
git remote prune origin 远程分支删除后,本地同步删除。(这个只能删除远程分支映射本地分支的缓存,以remotes/origin/ 开头)。本地打开过的分支还是要git branch -d <分支名>逐一删除。
查看从哪个分支拉出来:git reflog --date=local | grep <branch_name>
git config -l 查看所有配置, 后面加上 --global/system/local:查看相应作用域的配置
git remote
暂存代码
切换分支,代码要不提交,要不储藏起来,否则会切换分支失败或者将改动带到新分支。
git stash -- git stash push简单写。 不再推荐使用 git stash save。默认将工作区(working tree)、索引区(staged/indexed)的改动储藏起来。不包括 untracted file。 -u 加上 untracked file;-k 不储藏索引区
git stash -m '<说明>'
git stash <file> 只储藏指定文件
git stash list
git stash pop|apply [<stash id>] --pop:同时删除储藏内容。应用储藏内容默认不改变索引区,--index 改变索引区
git stash drop|show <stash id>
git stash clear
大多数时候还是推荐commit 了再切换分支
合并代码、解决冲突
git merge <branch> 将branch的代码合并到当前分支。一般用 git merge origin/<branch>,如果没有origin,合并的是本地分支,而本地分支不一定更新了,需要切换到branch分支先pull代码。
git pull origin <branch> 合并远程分支代码到当前分支
git checkout --ours/--theirs <file/path> 使用本地/远程代码解决冲突文件
**挑拣代码:**
git cherry-pick <commit id>:将某个提交合入到当前分支。(2个隐含意思:1.这个提交是其它分支的。 2.这个提交本分支没有的)
remote是 remote repository 的缩写,也就是远程仓库,git clone 是下载仓库到本地,默认远程仓库的名字是 origin。每个仓库都有一个默认主分支,这个名字一般是 master。本地并不是远程代码的分支,而是镜像,也就是本地和远程变成了一样的。远程的所有版本和分支也会被下载下来。每个版本用一个UUID标记,FETCH_HEAD指向最新那个版本。
本地仓库可以对应多个远程仓库,前提是这2个仓库有交叉的分支历史,也就是这2个仓库曾经是一样的。这样才可以从这个交叉点之后的代码改动有选择地合并到远程仓库。
为什么有时提交的pr会显示别人修改的代码
原因:
按时间顺序,在分支 master上,前天小明提交了代码合进去了,昨天我在分支 branch上提了一个pr合到master,在提pr前没有更新master的最新代码(pull),pr也合进master了。今天,我继续提交一个pr,在提pr前进行了 pull。这时,branch 上会合入小明的pr,但小时的pr是在我昨天提交的代码后合入的,我执行 commit 时,就会认为我修改过小明的代码了,所以提pr时,显示的修改处就会包含小明的代码!!