Ubuntu 下 sudo apt-get install git 即可完成安装。
设置:
git config --global user.name OOC // 设置用户名
git config --global user.email whatisooc@gmail.com // 设置邮箱
git config --list // 查看设置的信息
git config --global -e // 编辑所有设置
[alias]
st = status // git st # git status
ck = checkout // git ck # git checkout
Git通过git config
命令来配置Git,这个命令有2个选项:
--system
--global
和默认选项,分别对应Git上3级配置文件。
- 第一个是/etc/gitconfig文件,和–system对应,这是全局配置文件,修改这个文件,将会影响系统上所有的用户,所有的仓库。
- 第二个是你家目录下的/.gitconfig文件,与–global对应,修改它会对你当前用户的所有仓库产生影响。
- 第三个是你仓库中的.git/.gitconfig文件,这是“git config”默认修改的配置文件,它只会对你当前仓库产生影响。
初始化:
git init //新建文件夹,或在想建立仓库的文件夹下,初始化git。
// 相关文件均在 .git中。
git clone http://github.com/OOCZC/hello-world
git clone git@github.com:OOCZC/hello-world
// 使用这种方式SSH的clone,之后才能用SSH免密码push
// 克隆后本地master和远程master对应起来。
// 克隆github上的一个项目。建立在当前文件夹下。
// 克隆下来的代码即已经带.git文件,克隆之前不需要git init来初始化
Git 主要有三个概念
Modified(working directory):被修改过的文件
Staged(staging area):通过git add添加到暂存区域的文件
Committed(git directory):通过git commit提交到仓库的文件
基本用法
git push //将本地commit的代码更新到远程版本库中
git add filename1 filename2 //把filename1和filename2文件添加到暂存区
git add "*.txt" //不要忘记引号
git add -A //它会把当前目录下所有的文件都添加到暂存区域。
git commit // 把暂存区内的文件形成一个版本。
git commit -m 'xxx' //xxx为这个版本的说明
git commit -am 'xxx' // 对于已经跟踪的文件,可以直接提交,无需git add -A
git remote -v // 查看远程仓库的地址git status // 查看当前的状态
git remote rm origin //删除远程仓库origin地址
git remote add origin https://github.com/try-git/try_git.git
// 添加远程仓库的地址,起名为origin
git remote add origin git@github.com:OOCZC/hello-world
// 添加远程仓库的地址,起名为origin,SSH免密码方式登录
git push -u origin master
// 上传到远程仓库origin,master是本地主分支。 -u 为记住参数,下次直接git push 就好。
git push -f -u origin master
// 强制push。本地版本落后远程仓库,强制使远程仓库回滚。
git pull origin develop-origin:develop-local
// 把远程origin库的develop-origin分支的更新拉到本地develop-local分支
git pull origin develop-origin
// 把远程origin库的develop-origin分支的更新拉到本地当前分支
git pull origin master // 从origin 库的master分支更新回本地当前分支
git pull origin // 从origin 库的xx分支更新回本地当前的xx分支(和本地当前分支同名)
git pull --rebase origin master // 从origin 库的master分支更新回本地当前分支,不增加很多commit记录
git diff //查看修改的内容。 ( 当前内容和暂存区或最近版本对比 )
git diff --staged // 和staged对比,显示区别
git diff HEAD // 和HEAD对比,显示区别
git reset octodog.txt // 把octodog.txt 移出 staged区。
git reset --hard 054rfd // 回滚到版本号为054rfd开头的版本。 也可以回滚到"未来"
git reset --hard HEAD //回滚到最近的版本。 HEAD^ 第二近的版本。 HEAD~10 表示有10个^,第十一个版本。
git reset –soft 0f11 // 版本回退,和--hard的区别为,这个不回退当前文件,只删除commit。 hard 回退所有文件。
git log //查看历史日志
git reflog // 查看所有历史及“未来“日志
git status // 查看当前工作空间的状态
//下面两条可以把暂存区的文件修改,彻底消除。
git reset HEAD file // 把暂存区file的修改撤销掉,重新放回工作区。
git checkout -f // 把file还原成暂存区或版本库。优先暂存区。 删除的文件也可找回。
git rm file // 提交删除file文件的记录。只rm,不git rm,commit后新版本也不知道rm了。
git rm --cached a.py //从暂存区移除a.py,不删除a.py本地文件
分支管理
git branch test //创建一个test分支
git checkout test //转到test分支
git checkout -b test // 创建并切换到test分支
git branch //查看分支列表
edit something...add something...commit something...
git checkout master //转到master分支
git merge test //合并test分支
git branch -D test //删除test分支
git branch -v // 查看本地分支
git branch -a // 查看远程分支
//git merge 默认是fast forward模式,即直接把master指向新的分支。这样就看不出合并的记录。
git merge --no-ff -m "xxx" dev // 不以ff模式融合dev分支,这样相当与新建一个commit,会保留分支合并的记录。
合并多个commit
commit 423u
修改三
commit 8sff
修改二
commit 67ty
修改一
commit 23fs
原始版本
比如这里想把修改一二三commit合并成一个修改。
git rebase -i 23fs
进入编辑页面,这里将想去除的commit的pick改成s,这里一定注意不能压缩67ty这个版本,
也就是编辑页面的第一个pick不能改成s,不然会崩!!(编辑页面和实际版本是倒序)
pick commit 67ty
s commit 8sff
s commit 423u
修改后 :wq
跳出信息修改页面,改成新的版本名即可。
远程分支
刚clone下来的库只有master分支:
git checkout -b dev origin/dev // 这里从远程仓库下载dev分支。
git push origin dev // 推送dev分支至远程仓库
发生冲突
如果两个分支都修改过同一个文件,那就不能直接merge,需要手动解决冲突。
这里README.md 发生冲突,打开文件,修改成想要的形式。
然后
git add README.md // 提交冲突文件
git commit -m "xxxx" // 至此就merge成功了!可以查看分支合并图确定!
git log --graph //显示分支合并图
暂时储存
git stash // 暂时储存工作区,可以去其他分支工作了!
回来后。
git stash apply //恢复工作区
git stash drop // 删除stash记录
或者用一条命令
git stash pop //恢复工作区并删除
git stash list // 查看stash列表
附录:
md5sum命令,md5sum file // 输出文件file的MD5校验码
md5sum file > file.md5 //把file文件的md5码写入到file.md5文件内。
md5sum -c file.md5
// 在当前文件夹下寻找file文件,并把file生成的md5与file.md5的内容对比,输出确定或错误。
> 和 >>都是标准输出。out > file,把前面的内容变成标准输出流,覆盖写入file文件。
>> file ,追加写入file文件。
< file , 把file当成标准输入流,读入,ACM时可把样例输入写入file文件来给程序读输入。