git常用操作

目录

Git用户配置:

repo创建:

提交:

回退:参考的是git log --pretty=oneline的版本

删除:

关联、传输:

分支:

冲突:

其他


Git用户配置:

$ git config user.name "Jerry"
$ git config user.email 123456@qq.com
$ git config --list查看配置 
keygen:注意配置的邮箱必须与的邮箱相同!
ssh-keygen -t rsa -C "123456@qq.com"

 

repo创建:

1,选择一个合适的地方,创建一个空目录:
$ mkdir myproject
$ cd myproject
$ pwd用于显示当前目录,在我的Mac上,这个仓库位于/Users/Jerry/myproject ,请确保目录名(包括父目录)不包含中文。
2,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
$ls -ah 显示隐藏目录

 

提交:

用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file" 每次修改,如果不add到暂存区,那就不会加入到commit中
本地commit,前提是你已经设置了本地git的用户信息!
$ git diff readme.txt 查看modified了什么(对比到当前版本库);git diff head^ readme.txt对比到上一个版本库;
$ git log 历史记录 如果嫌输出信息太多,加上--pretty=oneline参数

 

回退:参考的是git log --pretty=oneline的版本

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
$ git checkout --readme.txt就是让这个文件回到最近一次git commit或git add时的状态(消红)
$ git checkout --. 消除此路径下所有modify


git reset(可以消绿)命令既可以回退版本(--hard是直接文件替换,清除掉modify的内容)
$ git reset --hard HEAD(恢复当前版本)HEAD^(恢复到上一个版本)
$ git reset HEAD^(恢复到上一个版本,保留与上一个版本之间的modify信息 )


如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录reflog 是查看整个版本跳转流程,log是从当前版本往前看


用$git reflog查找某个版本号再reset回去也行
$ git reset --hard 3628164恢复未来的某个版本



 

删除:

直接用rm删除test.txt,但是.git文件中依然有test.txt存在的状态,可以通过tab补齐来验证。
要真正删除它:
$ git rm test.txt         $ git commit -m "remove test.txt"
也可以
$ add .                      $ git commit -m "remove test.txt"
rm删错了,把误删的文件恢复到最新版本:
$ git checkout -- test.txt
清楚目录下的untracked文件:
# 删除 untracked files
git clean -f
# 连 untracked 的目录也一起删掉
git clean -fd
# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd




github

关联、传输:

1、需要先在github上面创建此项目的空目录、本地创建空项目、然后本地项目下github进行关联(只是关联到远程仓库)
$ git remote add origin git@github.com:wuzeyu2015/myproj.git,origin就是远程仓库的名字。
git remote 查看目前关联了那些远程仓库
git remote rm origin 解除关联
2、代码推送远程仓库\ 取回本地
对远程仓库的push只能在git@ssh方式的关联下进行(clone来的可以直接在http上push),注意远程仓库是否已有你本机的ssh(ssh-keygen -t rsa -C jerry@example.com,github上面公钥名称为Tieto)
$ git push -u origin master \ $ git pull(pull = fetch+merge) origin master (pull :取回远程主机某个分支的更新,再与本地的指定分支合并,比如,取回origin主机的next分支,与本地的master分支合并,需要写成$git pull origin next:master)
$git pull origin master --allow-unrelated-histories
3、克隆
$ git clone git@github.com:michaelliao/gitskills.git (GitHub还可以用https://github.com/michaelliao/gitskills.git这样的地址)
修改链接协议:
在你git clone项目后,只需将.git/config文件中
url = http://xxx.com/Name/project.git 改为url = git@xxx.com/Name/project.git 即可。
测试你的ssh-key
ssh -T git@xxx.com

 

分支:

创建分支:git branch dev      切换分支:git checkout dev           
创建+切换分支:git checkout -b dev  
查看分支:git branch
删除分支:git branch -d dev      
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
  master
* personal/zwuxzey/mybranch
把本地新分支上推送到远程分支:git push origin personal/$USER/test
把改动后的分支推送到远程:git push origin HEAD:refs/for/personal/$USER/test
查看远程分支: $ git branch -a 
删除远程分支:git push origin :refs/for/personal/$USER/test (推送空给branchname)
合并dev分支到当前分支:git merge dev
分支推送参考指令:
http://blog.csdn.net/abo8888882006/article/details/12375091

 

冲突:

分支合并的冲突:
合并后提示有冲突,直接修改冲突文件,然后再commit,最后删除分支。
更新下来的内容和本地修改的内容有冲突的情景流程:
commit本地修改
或者先将本地修改暂时存储起来,处理的方式非常简单,git stash命令进行处理,分成以下几个步骤进行处理。
1、先将本地修改存储起来
$ git stash
这样本地的所有修改就都被暂时存储起来 。是用git stash list可以看到保存的信息:
git stash list


git stash暂存修改
其中stash@{0}就是刚才保存的标记。
2、pull内容
暂存了本地修改之后,就可以pull了。
$ git pull
3、还原暂存的内容
$ git stash pop stash@{0}
系统提示如下类似的信息:
Auto-merging c/environ.c
CONFLICT (content): Merge conflict in c/environ.c
意思就是系统自动合并修改的内容,但是其中有冲突,需要解决其中的冲突。
4、解决文件中冲突的的部分
打开冲突的文件,会看到类似如下的内容:


git冲突内容
其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。

解决完成之后,就可以正常的提交了。

其他

git log [--pretty=short] 
            [filename]
            [-p filename]显示改动
            [--graph]


git diff 工作树、暂存区差别 -[HEAD]工作树、最新提交区别


git checkout - 切换到上一个分支
切换到master分支,把特性分支合并进来:git merge --no-ff feature
git commit -am完成add和commit两步操作。


git rebase -i HEAD~2
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell

# d, drop = remove commit

github创建仓库,本地建立空repo后有commit记录,之后再git pull origin2 master。
$ git pull origin2 master
From github.com:wuzeyu2015/testRepo
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories


以github上新建仓库时是否有initialize with README来区分是先有github仓库还是本地repo.(无论如何都需要在github上新建仓库,然后才能将本地与github同步)


github上新建了空的repo,本地可以这样链接到github:
Git remote add origin git@github.com:github-book/git-tutorial.git
Git push origin(本地仓库名称) master(本地仓库分支)


在原创仓库隔壁进行分支开发:
clone源仓库之后,新建本地分支,后面接来源分支名称:
git checkout -b branch1 origin/testRepo/branch1
然后就可以push新的commit:
git push origin HEAD:testRepo/branch1 <=> git push origin branch1<=>git push(之前push中添加-u后不用指明push的仓库和分支名)
前面没有添加refs/for,待查。


回到源仓库
先要对分支进行更新:
git pull origin testRepo/branch1
然后继续开发
===================
协作者在其他的机器上面可以fork后,再clone源仓库。
开发:
协作者建立新的feature分支,开发完成后push到自己的github上。
pull request:
协作者在github上切换到这个feature分支,可以点击pull request。
同步源仓库:
协作者在在本地仓库上面连接源仓库并设置到本地的名称为upstream
git remote add upstream git://github.com/源仓库.git
Git fetch upstream
Git merge upstream/master

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值