1、拉取项目
git clone git@XXXX
2、向仓库中添加新文件
- working directory to staging area:
git status; git add README
or
git add .
- staging area to git repository:
git status; git commit -m "init repo"
- 历史提交commit日志:
a. 查看提交记录
git log
b. 查看所有的修改内容
git log -p
c. 绚丽展示
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
上面的所有命令都是本地操作,并不会与远端有任何通信
3、查看已修改的内容
git diff --cached
git diff README README^
^表示向前推进一个版本
git查看修改历史
git log --oneline
git show f8e2ddc
4、 直接提交到仓库
git commit -a -m "modify README"
commit -a
相当于自动地add所有改动的代码,使得所有的开发代码都列于index file中,自动地删除那些在index file中但不在工作树中的文件,执行commit命令来提交
5、删除文件
- 本地删除
rm README
- 从git中删除
git rm README
or
git rm -r dir
- 提交操作
git commit -m "delete README"
6、撤销本地修改
对于未进暂存区的文件:
git checkout -- file
对于已git add
进暂存区的文件,使用
git reset file
命令取消暂存,再用
git checkout -- file
撤销本地修改,一步到位:
git checkout HEAD -- file
撤销过去5个commit
# 软重置,改变本地HEAD的指针, 指向commitId6,把最近5步的提交还原到工作区
git reset HEAD~5
git reset commitId5
# --hard commitId 强制移动指针到这个分支,会销毁它前面的所有的信息,本地的修改也会还原,是蛮危险的行为
git reset --hard commitId5
7、重命名文件
git mv README README1
git commit -m "rename README"
8、分支操作
- 创建分支:
git branch new_branch
上面命令不切换到新分支上,创建并切换到新分支使用:
git checkout -b new_branch
- 查看当前分支:
git branch
- 关联远程分支:
git branch -u origin/branch
- 查看所有分支:
git branch -a
- 查看远程分支:
git branch -r
- 移除过期的branch:
git branch -d old-merged-feature
9、分支切换
git checkout master
10、拉取最新代码
git pull
git fetch
区别是git fetch只是将远端的信息同步到本地,并不会覆盖本地工作目录的代码,而git pull相当于fetch之后又做了一次merge
11、提交代码到远程服务器
git push
12、合并分支
git merge --no-ff new_branch
13、多次commit合并
git rebase -i head~4
-i(interactive)模式展示,操作最近4次的提交
14、代码暂存
在分支 A 上工作,突然要改分支 B 上的代码,并不想提交分支 A,而希望保留现在的改动,这时可以使用:
git stash
等从分支 B 切换回分支 A 时,使用如下命令来恢复之前的改动
git stash apply <stash@{n}>
或者回到最后一个stash的状态,并删除这个stash
git stash pop
查看所有 stash
git stash list
删除最新 stash
git stash drop
删除所有 stash
git stash clear
15、打tag
查看标签
git tag
本地创建标签
git tag -a v1.2.4 -m "统计近30天的ctr"
推送标签到远程仓库
git push origin v1.2.4
16、撤销已push到远端的commit
git reset --hard version_number
// --hard会抛弃当前工作区的修改
// --soft的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交
git push origin branch_name --force
git reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区
git reset --hard HEAD让工作区回到上次提交时的状态
git revert用一个新提交来消除一个历史提交所做的任何修改
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
17、删除.idea文件,.gitignore
git rm --cached -r .idea
18、删除未被追踪的文件
git clean -fdx
-f - force
-d - directories too
-x - remove ignored files too
19、拉去远程别人的分支
// --track is shorthand for git checkout -b [branch] [remotename]/[branch]
git fetch --all
git checkout --track origin/daves
20、撤销代码合并merge
git reset --hard ORIG_HEAD
21、使用一次新的commit,替代上一次提交
git commit --amend -m "new message"
最后,用阮一峰的《Git远程操作详解》里面的一张图总结: