Git常用命令
首先我个人使用git有几个建议:
一. 是琐碎提交 频繁提交,在一个commit中只作与当前commit相关的事情,多余代码应当属于其他的commit
这样做的好处是当你的leader去review你写的代码的时候,他在合并一个commit的时候可以清楚的知道你做了什么
二. 尽量避免使用git pull, 这个命令相当于git fetch + git merge, 如果多人在同一个分支
上开发,那么git pull绝对是噩梦般的命令,因此不要使用git pull
三. 不要使用无意义的分支名称,一个分支名称应当是此分支所完成功能或者是bug_fix,分支名最好不要出现大
写,使用_链接,不要使用dev这样的分支名。每个功能对应每个分支,而不是开发人员对应分支
拉取操作
1. 复制代码库
git clone https://xxxxxxxxxxxxxxxxxxx.git https方式
git clone git@xxxxxxxxxxxxxxxxxxxxx.git ssh方式需要配置密钥
2. 获取最新代码
git fetch 拉取远端分支代码到本地,此时本地分支不会自动更新
git pull 拉取远端分支代码到本地并自动合并本地代码(极不推荐)
git pull相当于git fetch + git merge这就导致了假如有其他人也在此分支开发时,他的代码会直
接被合进你的分支,此操作无疑是非常危险的
git fetch只是将远端的分支拉取到了本地,合不合并由你自己决定,fetch之后可以使用git rebase
或git merge来合并代码
3. 查看代码提交记录(图形化)
git log --oneline --graph --all --decorate建议将此命令添加到自己的.bashrc文件中,方便使用
4. 修改远程仓库地址
git remote remove xxxx 首先移除远程仓库地址xxx为当前分支名
git remote add origin git@github.com:xxx/xxx.git 加入新的远程地址
提交操作
1. 添加需要提交的文件到暂存区
git add src/main/xxxxx.java
git add -a 将所有文件全部提交到暂存区
git add -i -p xxxxx 这个命令的作用是打开一个类似git diff的界面,使用这个命令你可以将一个文件中不同的改动归属到不同的commit中,方便分化管理
当一个页面中有多处改动并且各项改动中有明显的界线划分的时候,就可以在git add -i -p xx的情况下选择e来分割代码使用
推荐使用此命令添加文件
2. 提交到本地版本库
git commit -m"commit message" git commit主要是将暂存区里的改动给提交到本地的版本库,-m是之后是写入提交信息
3. 推送本地分支到远端
git push 此命令会将本地的所有commit提交到远端分支
git push -f 强制更新,用本地分支代码强制更新远端(在没有备份的情况下不可逆,请注意使用时机,慎用)
4. 撤销已经commit但未push的代码(保留代码)
git reset --soft HEAD^ ^代表上一次改动,如果想撤销上一次的改动则使用
git reset --soft HEAD~1 撤销几次~后就写几次
5. 撤销已经commit但未push的代码(不保留代码,慎重使用!!!!!)
git reset --hard HEAD^ ^代表上一次改动,如果想撤销上一次的改动则使用
git reset --hard HEAD~1 撤销几次~后就写几次
5. 修改已经提交的commit message
git commit --amend 此命令可以修改最近一次提交的commit信息
分支操作
1. 创建新分支
git branch xxx创建分支
git checkout -b xxxxx创建新分支xxx(不要求远端存在分支,不会自动设置上游分支)
git checkout xxx 根据上游分支自动创建
2. 推送新分支到远端
git push origin xxxx:xxxx
git push --set-upstream origin xxxxx建立与远端的跟踪
3. 删除分支
git branch -D xxxx强制删除本地分支
git push origin --delete xxx删除远端分支
git remote update origin --prune 刷新本地分支(删除远端后可能本地还会有缓存,可以使用此命令来刷新)
4. 暂时储存分支改动
git stash save 将此分支的所有改动都储存到stash中,当你需要在开发中临时切换分支时就可以使用这个命令来储存改动
git stash save -p 与git add -i -p 有着类似的操作,可以更为精细的进行代码储存
5. 查看储存的分支改动
git stash list 查看当前有多少已储存的stash列表
git stash show stash@{n} 查看某一个储存的stash改动了那些文件, n就是你stash储存的序号
6. 应用储存的改动
git stash apply stash@{n} 应用序号n的stash到当前分支,序号为n的stash不会被删除
git stash pop 应用所有stash到当前分支,在没有冲突的情况下stash会被删除
7. 删除储存的改动
git stash drop stash@{n} 删除序号为n的stash
8. 删除远端代码但不删除本地代码
git rm --cached xxxx 删除单个文件
git rm -r --cached xxxx 删除文件夹
合并操作
1. 合并分支代码
git merge xxx(xxx为需要合并的分支,当前分支应为待合并分支)
2. 变基分支代码
git rebase xxx(xxx为需要变基的分支,当前分支应为待变基分支)
使用此操作大致与merge相同,但是rebase之后留下一条合并记录,这使你的提交历史看起来一清二楚,
但是此命令存在一定的风险,目前先不讲解(之后补)
3. 变基从一个分支分叉出去的代码
git rebase --onto master server client
假设你在matser开发功能,之后切出去一个分支server,在server开发了一段时间后,你又从server上切出一个分支client,
这时候你的matser需要client上的代码,但是server上的代码又需要开发一段时间,这时候就可以使用此命令
使用此命令后就可以将client上的代码重放到master上,而server代码可以继续开发
打包操作
1. 将某个分支下的代码打包成zip
git archive master > ~/master.zip
2. 将某个tag下的代码打包成zip
git archive v0.1 | gzip > v1.0.zip
修改Git者信息
1. 查看当前系统下提交者信息
git config --global--list
2. 修改提交者信息
git config --global user.name "xxxxxx"
git config --global user.email "xxxxxx"
持续更新。。。。。