Git -- 常用命令和基本例子操(推荐阅读)
2015-11-17 14:53
453 查看
一:-----网上给力教程-----
1.1.git参考手册
1.2 git SubModule子模块完整教程
1.3 git高效学习中文版
1.4 如何高效利用github
-----------------------------------------------------
采取强制git
$git push gitblit master -f
-----------------------------------------------------
建立分支避免覆盖
$git branch arm-bin
-----------------------------------------------------
查看分支
$git branch
-----------------------------------------------------
切换分支
$git checkout tmp
-----------------------------------------------------
删除多余分支
$git branch -d arm-bin
-----------------------------------------------------
删除已更改并提交了的分支
$git branch -D arm-bin
-----------------------------------------------------
查看git项目
$git log
-----------------------------------------------------
默认下载代码 -- 默认下载 master分支代码
$git clone http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
-----------------------------------------------------
下载别的分支的代码 -- 下载 arm-bin分支代码
de>de>
de>$git clone -b arm-bin http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.gitde>
-----------------------------------------------------
git status 查看有什么文件被改动过
-----------------------------------------------------
git status -s 查看当前修改过什么文件
-----------------------------------------------------
git diff 观看所有修改的文件,那些地方被修改了~
-----------------------------------------------------
git diff file_name 观看file_name文件,那些地方别修改过
-----------------------------------------------------
git reset --hard <commit hash 值> 还原回到commit这个还原点的状态!
-----------------------------------------------------
git whatchanged 查看所有还原点中,工程对那些文件做了修改
-----------------------------------------------------
git remote rm origin 删除远程的origin这个名字 --
一般origin这个名字是保存在 .git/config中,
也可以直接进入到这个文件中,删除origin
-----------------------------------------------------
git fetch origin master:tmp 下载远程服务器上的源码,作为我本地源码的 tmp分支
-----------------------------------------------------
git merge tmp 合并当前分支和 tmp分支
-----------------------------------------------------
git config core.filemode false 忽略文件权限配置
以上这样设置了忽略文件权限,查看下配置:
$ cat .git/config
-----------------------------------------------------
三:-----基本例子介绍-----
3.1 我自己创建一个仓库,然后上传代码到仓库中
在这里,暂定定义服务器 ip : 192.168.6.201
3.1.1: 在服务器端
创建一个 项目的.git仓库
de>
root@dev-201:/home/git# su git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ exit
de>
3.1.2:在自己的pc机端
创建一个项目
de>
root@ubuntu:/home/zhx/work# mkdir teamwork
root@ubuntu:/home/zhx/work# cd teamwork
root@ubuntu:/home/zhx/workteamwork# mkdir aaa
root@ubuntu:/home/zhx/workteamwork# touch cccc
root@ubuntu:/home/zhx/workteamwork# cd aaa
root@ubuntu:/home/zhx/workteamwork/aaa# touch aaa ccc
de>
3.1.3 使用git项目管理上传项目到服务器中
de>
root@ubuntu:/home/zhx/work # git init
root@ubuntu:/home/zhx/work # git add .
root@ubuntu:/home/zhx/work # git commit -am "No.1"
root@ubuntu:/home/zhx/work # git remote add origin git@192.168.6.201:teamwork.git //仅仅把origin名字等于了 git@192 。。。
root@ubuntu:/home/zhx/work # git push origin master //上传到服务器中
de>
3.1.4:另外一个人的pc上下载该项目
de>
zhx@ubuntu:/home/zhx/work # git clone git@192.168.6.201:teamwork.git //通过执行这个命令,就可以把存在在服务器上的下载下来!
de>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.2 以一个员工的身份,从无到有 上传自己的代码到服务器中
配置Git
$git config --global user.name "zhenghexiang"
$git config --global user.email "zhenghexiang@boromax.com"
查看配置
$git config user.name
$git config user.email
$cat ~/.gitconfig
初始化仓库并提交 -- 假设远程的服务器有一个 miniserver.git 仓库
$git init
$git add .
$git commit -m 'arm-linux-server'
$git remote add gitblit http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
$git push gitblit master
经理说git这个域名上传速度会更快
git remote add gitblit http://zhenghexiang@git.boromax.cn:8010/git/Server/miniserver.git //这个是骗人的,任何域名都一样...
因为我之前已经git了一部分代码上去,所以再次git不允许覆盖
de>de>
de>To http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.de>
所有,在这个问题上,在不改变仓库的情况下,有以下两种解决方法:
1:采取强制 git 上传
$git push gitblit master -f
强制 git 太暴力,很容易把仓库弄坏,这里推荐使用branch分支的方法!!
2:建立分支!
a.把要添加的内容重新建立一个git工程,然后添加分支
$cd arm-bin
$git init
$git add .
$git commit -m 'arm-bin'
$git branch arm-bin //分支名随便取
b.切换到你当前创建的分支并git到服务器
$git checkout arm-bin
$git remote add gitblit http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
$git push gitblit arm-bin
下载git服务器的代码
$git clone http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
此命令默认下载master主分支上的代码,要想下载其它分支的代码 -- 此命令下载别的分支上的代码!
$git clone -b arm-bin http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.3 当修改了一些文件之后,查看修改过什么文件和改动过什么内容
首先查看有什么文件被修改过 -- 在这里可以看到,我们修改了aaa.c 和 aaa.c.bak两个文件
de>
$ git status
de>
如如下操作:
然后在看一下,这些文件我们具体修改了什么
de>
$ git diff
de>
如下操作:
可以看到,对于 aaa.c 文件, 我们添加了
。
对于 aaa.c.bak 文件,我们添加了
删除了
!!!
当然啦,我们想单独查看某个文件做了什么修改,我们可以使用如下命令:
de>
$ git diff file_name
如:
$ git diff aaa.c
de>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.4 当发现修改的文件有问题的时候,想回到前一个还原点
首先,使用
git log 观看已经保存的还原点
de>
$git log
de>
在这里可以看到,我们有两个还原点,
一个是 :
另外一个是:
在这里,我们想回到第一个还原点 -- 70161b8f57035825f0289bd9978e9b00c65617b9 上
使用如下命令:
de>
$ git reset 70161b8f57035825f0289bd9978e9b00c65617b9
de>
当执行上面的命令后,仅仅是回到那个还原地上,但是代码上做的修改还是没有改变回去的!,还需要做
一下的操作,完全改变回去!
de>
$ git checkout -f && git clean -df
de>
git checkout -f是清除更改过的文件的差异部分,
git clean -df是清除新创建的文件,
当然在git reset的时候加上--hard也可以删除改动部分。
git reset --hard <还原点> 这个命令就相当于 git reset <还原点>和 git checkout -f && git clean -df 这两个命令的结合!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.5 单独撤销未提交的修改
(1) git checkout
恢复某个已修改的文件(撤销未提交的修改):
de>de>
de>$ git checkout file-namede>
例如:
我先使用git diff aaa.c 比较我这里的 aaa.c做了什么修改:
de>de>
de>$ git diff aaa.cde>
可以看到在这里,我添加了几行的代码,但是这些修改,我都不想要,要还原回去以前的状态,使用如下命令:
de>de>
de>$git checkout aaa.cde>
在使用git diff aaa.c中可以得到:
已经还原到最初的没有修改前的状态上了!
比如修改的都是java文件,不必一个个撤销,可以使用
de>de>
de>$ git checkout *.javade>
撤销所有修改
de>de>
de>$ git checkout .de>
(2) git revert
撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
* git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit-id (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.6 下载远程服务器源码,作为自己源码的一个分支,判断是否合并!
由于在一份代码上,有多个人在对这份代码进行着修改和管理,所以,在有些使用中,别人做的
修改,并且已经提交到服务器上了,我自己的本地代码也做了有修改,在这个时候不能贸然合并,
我们可以通过一些的一些命令,来判断是否合并。
首先在这里先说明:
和直接
是等价的操作!!
在实际使用中,git fetch更安全一下
因为在merge前,我们可以查看更新的情况,然后在决定是否合并!
在这里,有如下操作实验例子:
分布下载服务器中的代码,在合并
Machine-A、Machine-B
Machine-A clone 工程,然后更改提交push
Machine-B ==> git fetch origin master:tmp
将服务器上的代码创建拷贝到本地tmp分支,然后切换到tmp分支
此时在tmp分支的文件中可以看到更改的痕迹
切换回master分支,提示如下,并且打开文件无任何更改。
说的是本地的master分支落后于服务器上的master分支一次提交,可以快进
比较两个分支,可以看到本地master分支上少了一些注释。
合并分支
git log -p master ..origin/master ==>显示了最新的一次commit提交的log
git log -p master origin/master ==>显示了所有commit提交的log
直接下载服务器中的代码并合并
直接git pull
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.7 假设这么一种情况,user1改变了代码并且推送了,
而user2不知道源代码有了更新,没有pull到本地,
还是在原始代码的基础上更改,然后也要推送。
这个时候会发生如下现象:
显然push被拒绝了,因为是非快进式更新
对于快进式更新,我的理解是比如服务器上有commit1、commit2、commit3三次提交,而本地机器上目前的提交状况是commit1、commit2、commitN,
此时要push commitN这次提交,因为不符合快进式提交原则就会失败,而如果是commit1、commit2、commit3、commitN,那么此时提交是一个有序的快进式的,可以提交。
一种解决方式为:git push origin master -f (强制提交),
会覆盖了其他用户提交的结果,不可取
第二种方式:git pull & git push,推送成功
本地工程log
服务器上的工程log
此时的状况就是快进式的更新了。
合并冲突的情况有如下几种,也有不成功的情况。
1.修改不同文件
2.修改相同文件的不同区域
3.修改相同文件的相同区域
4.两个用户同时修改相同文件的文件名
5.user1修改了文件名,而user2使用旧文件名修改(树冲突)
四:-----碰到问题解答-----
4.1. git commit -am问题
当使用git commit时:
de>
root@dev-201:/home/git/PcKey/gitosis-admin# git
commit -am "add user 200 196"
de>
出现如下问题:
de>
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit -- global to set the identity only in this repository.
de>
并且使用git log没有显示新添加的信息的时。
解答:
原因如下,没有添加 email 和 name 地址,在命令行中,执行如下操作即可
de>
# git config --global user.email "boromax.com"
# git config --global user.name "boromax"
# git commit -am "add user 200 196"
de>
git log 时即可看到提交的节点
到这里说明commit成功!!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.2.使用 git push origion master上传的时候:
de>
root@dev-200:/home/b/teamwork# git remote add origingit@192.168.6.201:repositories/teamwork.git
root@dev-200:/home/b/teamwork# git push origin master
de>提示如下问题时:de style="font-size: 14px;" >
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 333 bytes,
done.
Total 6 (delta 0), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To git@192.168.6.201:repositories/teamwork.git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'git@192.168.6.201:repositories/teamwork.git'
de>
解答:
你远程服务器上的teamwork.git 是root的权限,请使用git权限创建 teamwork.git!!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.3.使用 gitthub 碰到的问题
如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git
提示出错信息:fatal: remote origin already exists.
解决办法如下:
1、先输入$ git remote rm origin
2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git就不会报错了!
3、如果输入$ git remote rm origin 还是报错的话,error: Could not
remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容
4、找到你的github的安装路径,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
5、找到一个名为gitconfig的文件,打开它把里面的de>[remote "origin"]那一行de>删掉就好了!
如果输入$ ssh -T git@github.com
出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。
解决办法如下:
1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。
2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git
Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。
3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
如果输入$ git push origin master
提示出错信息:error:failed to push som refs to .......
解决办法如下:
1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来
2、再输入$ git push origin master
3、如果出现报错 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal:
Could not read from remote repository.
4、则需要重新输入$ git remote add origingit@github.com:djqiang/gitdemo.git
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.4. linux中,递归删除.gitinore文件
find . -name ".gitignore" | xargs rm -f
4.5 当上传命令的时候碰到
error: Couldn't resolve host 'git.boromax.cn' while accessinghttp://zhenghexiang@git.boromax.cn:8010/git/BR3100/38xx.git/info/refs?service=git-receive-pack
fatal: HTTP request failed
解决:
sudo vim /etc/resolv.conf
-------------------------------------
nameserver xx.xx.xx.xx
如果这个没有设置的话会造成update时域名不能解析。
sudo /etc/init.d/networking restart
防止dhcp自动的来该dns设置
sudo chattr+i /etc/resolv.conf
4.6. linux中,忽略改变文件属性的记录
$git config core.filemode false
这样就可以设置忽略文件权限了,查看一下配置:
cat .git/config
4.7. 如何删除远程提交的某个点
首先还原到你需要的点,然后使用命令
git push origin master --force
转载自:http://blog.163.com/zheng_he_xiang/blog/static/18650532620154493410765/
1.1.git参考手册
1.2 git SubModule子模块完整教程
1.3 git高效学习中文版
1.4 如何高效利用github
Git and Repo cheatsheet(官网介绍)
二:-----常用命令介绍----------------------------------------------------------
采取强制git
$git push gitblit master -f
-----------------------------------------------------
建立分支避免覆盖
$git branch arm-bin
-----------------------------------------------------
查看分支
$git branch
-----------------------------------------------------
切换分支
$git checkout tmp
-----------------------------------------------------
删除多余分支
$git branch -d arm-bin
-----------------------------------------------------
删除已更改并提交了的分支
$git branch -D arm-bin
-----------------------------------------------------
查看git项目
$git log
-----------------------------------------------------
默认下载代码 -- 默认下载 master分支代码
$git clone http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
-----------------------------------------------------
下载别的分支的代码 -- 下载 arm-bin分支代码
de>de>
de>$git clone -b arm-bin http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.gitde>
-----------------------------------------------------
git status 查看有什么文件被改动过
-----------------------------------------------------
git status -s 查看当前修改过什么文件
-----------------------------------------------------
git diff 观看所有修改的文件,那些地方被修改了~
-----------------------------------------------------
git diff file_name 观看file_name文件,那些地方别修改过
-----------------------------------------------------
git reset --hard <commit hash 值> 还原回到commit这个还原点的状态!
-----------------------------------------------------
git whatchanged 查看所有还原点中,工程对那些文件做了修改
-----------------------------------------------------
git remote rm origin 删除远程的origin这个名字 --
一般origin这个名字是保存在 .git/config中,
也可以直接进入到这个文件中,删除origin
-----------------------------------------------------
git fetch origin master:tmp 下载远程服务器上的源码,作为我本地源码的 tmp分支
-----------------------------------------------------
git merge tmp 合并当前分支和 tmp分支
-----------------------------------------------------
git config core.filemode false 忽略文件权限配置
以上这样设置了忽略文件权限,查看下配置:
$ cat .git/config
-----------------------------------------------------
三:-----基本例子介绍-----
3.1 我自己创建一个仓库,然后上传代码到仓库中
在这里,暂定定义服务器 ip : 192.168.6.201
3.1.1: 在服务器端
创建一个 项目的.git仓库
de>
root@dev-201:/home/git# su git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ exit
de>
3.1.2:在自己的pc机端
创建一个项目
de>
root@ubuntu:/home/zhx/work# mkdir teamwork
root@ubuntu:/home/zhx/work# cd teamwork
root@ubuntu:/home/zhx/workteamwork# mkdir aaa
root@ubuntu:/home/zhx/workteamwork# touch cccc
root@ubuntu:/home/zhx/workteamwork# cd aaa
root@ubuntu:/home/zhx/workteamwork/aaa# touch aaa ccc
de>
3.1.3 使用git项目管理上传项目到服务器中
de>
root@ubuntu:/home/zhx/work # git init
root@ubuntu:/home/zhx/work # git add .
root@ubuntu:/home/zhx/work # git commit -am "No.1"
root@ubuntu:/home/zhx/work # git remote add origin git@192.168.6.201:teamwork.git //仅仅把origin名字等于了 git@192 。。。
root@ubuntu:/home/zhx/work # git push origin master //上传到服务器中
de>
3.1.4:另外一个人的pc上下载该项目
de>
zhx@ubuntu:/home/zhx/work # git clone git@192.168.6.201:teamwork.git //通过执行这个命令,就可以把存在在服务器上的下载下来!
de>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.2 以一个员工的身份,从无到有 上传自己的代码到服务器中
配置Git
$git config --global user.name "zhenghexiang"
$git config --global user.email "zhenghexiang@boromax.com"
查看配置
$git config user.name
$git config user.email
$cat ~/.gitconfig
初始化仓库并提交 -- 假设远程的服务器有一个 miniserver.git 仓库
$git init
$git add .
$git commit -m 'arm-linux-server'
$git remote add gitblit http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
$git push gitblit master
经理说git这个域名上传速度会更快
git remote add gitblit http://zhenghexiang@git.boromax.cn:8010/git/Server/miniserver.git //这个是骗人的,任何域名都一样...
因为我之前已经git了一部分代码上去,所以再次git不允许覆盖
de>de>
de>To http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' section of 'git push --help' for details.de>
所有,在这个问题上,在不改变仓库的情况下,有以下两种解决方法:
1:采取强制 git 上传
$git push gitblit master -f
强制 git 太暴力,很容易把仓库弄坏,这里推荐使用branch分支的方法!!
2:建立分支!
a.把要添加的内容重新建立一个git工程,然后添加分支
$cd arm-bin
$git init
$git add .
$git commit -m 'arm-bin'
$git branch arm-bin //分支名随便取
b.切换到你当前创建的分支并git到服务器
$git checkout arm-bin
$git remote add gitblit http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
$git push gitblit arm-bin
下载git服务器的代码
$git clone http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
此命令默认下载master主分支上的代码,要想下载其它分支的代码 -- 此命令下载别的分支上的代码!
$git clone -b arm-bin http://zhenghexiang@boromax.cn:8010/git/Server/miniserver.git
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.3 当修改了一些文件之后,查看修改过什么文件和改动过什么内容
首先查看有什么文件被修改过 -- 在这里可以看到,我们修改了aaa.c 和 aaa.c.bak两个文件
de>
$ git status
de>
如如下操作:
然后在看一下,这些文件我们具体修改了什么
de>
$ git diff
de>
如下操作:
可以看到,对于 aaa.c 文件, 我们添加了
。
对于 aaa.c.bak 文件,我们添加了
删除了
!!!
当然啦,我们想单独查看某个文件做了什么修改,我们可以使用如下命令:
de>
$ git diff file_name
如:
$ git diff aaa.c
de>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.4 当发现修改的文件有问题的时候,想回到前一个还原点
首先,使用
git log 观看已经保存的还原点
de>
$git log
de>
在这里可以看到,我们有两个还原点,
一个是 :
另外一个是:
在这里,我们想回到第一个还原点 -- 70161b8f57035825f0289bd9978e9b00c65617b9 上
使用如下命令:
de>
$ git reset 70161b8f57035825f0289bd9978e9b00c65617b9
de>
当执行上面的命令后,仅仅是回到那个还原地上,但是代码上做的修改还是没有改变回去的!,还需要做
一下的操作,完全改变回去!
de>
$ git checkout -f && git clean -df
de>
git checkout -f是清除更改过的文件的差异部分,
git clean -df是清除新创建的文件,
当然在git reset的时候加上--hard也可以删除改动部分。
git reset --hard <还原点> 这个命令就相当于 git reset <还原点>和 git checkout -f && git clean -df 这两个命令的结合!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.5 单独撤销未提交的修改
(1) git checkout
恢复某个已修改的文件(撤销未提交的修改):
de>de>
de>$ git checkout file-namede>
例如:
我先使用git diff aaa.c 比较我这里的 aaa.c做了什么修改:
de>de>
de>$ git diff aaa.cde>
可以看到在这里,我添加了几行的代码,但是这些修改,我都不想要,要还原回去以前的状态,使用如下命令:
de>de>
de>$git checkout aaa.cde>
在使用git diff aaa.c中可以得到:
已经还原到最初的没有修改前的状态上了!
比如修改的都是java文件,不必一个个撤销,可以使用
de>de>
de>$ git checkout *.javade>
撤销所有修改
de>de>
de>$ git checkout .de>
(2) git revert
撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
* git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit-id (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.6 下载远程服务器源码,作为自己源码的一个分支,判断是否合并!
由于在一份代码上,有多个人在对这份代码进行着修改和管理,所以,在有些使用中,别人做的
修改,并且已经提交到服务器上了,我自己的本地代码也做了有修改,在这个时候不能贸然合并,
我们可以通过一些的一些命令,来判断是否合并。
首先在这里先说明:
和直接
是等价的操作!!
在实际使用中,git fetch更安全一下
因为在merge前,我们可以查看更新的情况,然后在决定是否合并!
在这里,有如下操作实验例子:
分布下载服务器中的代码,在合并
Machine-A、Machine-B
Machine-A clone 工程,然后更改提交push
Machine-B ==> git fetch origin master:tmp
将服务器上的代码创建拷贝到本地tmp分支,然后切换到tmp分支
此时在tmp分支的文件中可以看到更改的痕迹
切换回master分支,提示如下,并且打开文件无任何更改。
说的是本地的master分支落后于服务器上的master分支一次提交,可以快进
比较两个分支,可以看到本地master分支上少了一些注释。
合并分支
git log -p master ..origin/master ==>显示了最新的一次commit提交的log
git log -p master origin/master ==>显示了所有commit提交的log
直接下载服务器中的代码并合并
直接git pull
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3.7 假设这么一种情况,user1改变了代码并且推送了,
而user2不知道源代码有了更新,没有pull到本地,
还是在原始代码的基础上更改,然后也要推送。
这个时候会发生如下现象:
显然push被拒绝了,因为是非快进式更新
对于快进式更新,我的理解是比如服务器上有commit1、commit2、commit3三次提交,而本地机器上目前的提交状况是commit1、commit2、commitN,
此时要push commitN这次提交,因为不符合快进式提交原则就会失败,而如果是commit1、commit2、commit3、commitN,那么此时提交是一个有序的快进式的,可以提交。
一种解决方式为:git push origin master -f (强制提交),
会覆盖了其他用户提交的结果,不可取
第二种方式:git pull & git push,推送成功
本地工程log
服务器上的工程log
此时的状况就是快进式的更新了。
合并冲突的情况有如下几种,也有不成功的情况。
1.修改不同文件
2.修改相同文件的不同区域
3.修改相同文件的相同区域
4.两个用户同时修改相同文件的文件名
5.user1修改了文件名,而user2使用旧文件名修改(树冲突)
四:-----碰到问题解答-----
4.1. git commit -am问题
当使用git commit时:
de>
root@dev-201:/home/git/PcKey/gitosis-admin# git
commit -am "add user 200 196"
de>
出现如下问题:
de>
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit -- global to set the identity only in this repository.
de>
并且使用git log没有显示新添加的信息的时。
解答:
原因如下,没有添加 email 和 name 地址,在命令行中,执行如下操作即可
de>
# git config --global user.email "boromax.com"
# git config --global user.name "boromax"
# git commit -am "add user 200 196"
de>
git log 时即可看到提交的节点
到这里说明commit成功!!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.2.使用 git push origion master上传的时候:
de>
root@dev-200:/home/b/teamwork# git remote add origingit@192.168.6.201:repositories/teamwork.git
root@dev-200:/home/b/teamwork# git push origin master
de>提示如下问题时:de style="font-size: 14px;" >
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 333 bytes,
done.
Total 6 (delta 0), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To git@192.168.6.201:repositories/teamwork.git
! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'git@192.168.6.201:repositories/teamwork.git'
de>
解答:
你远程服务器上的teamwork.git 是root的权限,请使用git权限创建 teamwork.git!!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.3.使用 gitthub 碰到的问题
如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git
提示出错信息:fatal: remote origin already exists.
解决办法如下:
1、先输入$ git remote rm origin
2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git就不会报错了!
3、如果输入$ git remote rm origin 还是报错的话,error: Could not
remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容
4、找到你的github的安装路径,我的是C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
5、找到一个名为gitconfig的文件,打开它把里面的de>[remote "origin"]那一行de>删掉就好了!
如果输入$ ssh -T git@github.com
出现错误提示:Permission denied (publickey).因为新生成的key不能加入ssh就会导致连接不上github。
解决办法如下:
1、先输入$ ssh-agent,再输入$ ssh-add ~/.ssh/id_key,这样就可以了。
2、如果还是不行的话,输入ssh-add ~/.ssh/id_key 命令后出现报错Could not open a connection to your authentication agent.解决方法是key用Git
Gui的ssh工具生成,这样生成的时候key就直接保存在ssh中了,不需要再ssh-add命令加入了,其它的user,token等配置都用命令行来做。
3、最好检查一下在你复制id_rsa.pub文件的内容时有没有产生多余的空格或空行,有些编辑器会帮你添加这些的。
如果输入$ git push origin master
提示出错信息:error:failed to push som refs to .......
解决办法如下:
1、先输入$ git pull origin master //先把远程服务器github上面的文件拉下来
2、再输入$ git push origin master
3、如果出现报错 fatal: Couldn't find remote ref master或者fatal: 'origin' does not appear to be a git repository以及fatal:
Could not read from remote repository.
4、则需要重新输入$ git remote add origingit@github.com:djqiang/gitdemo.git
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.4. linux中,递归删除.gitinore文件
find . -name ".gitignore" | xargs rm -f
4.5 当上传命令的时候碰到
error: Couldn't resolve host 'git.boromax.cn' while accessinghttp://zhenghexiang@git.boromax.cn:8010/git/BR3100/38xx.git/info/refs?service=git-receive-pack
fatal: HTTP request failed
解决:
sudo vim /etc/resolv.conf
-------------------------------------
nameserver xx.xx.xx.xx
如果这个没有设置的话会造成update时域名不能解析。
sudo /etc/init.d/networking restart
防止dhcp自动的来该dns设置
sudo chattr+i /etc/resolv.conf
4.6. linux中,忽略改变文件属性的记录
$git config core.filemode false
这样就可以设置忽略文件权限了,查看一下配置:
cat .git/config
4.7. 如何删除远程提交的某个点
首先还原到你需要的点,然后使用命令
git push origin master --force
转载自:http://blog.163.com/zheng_he_xiang/blog/static/18650532620154493410765/
相关文章推荐
- 使用xdebug分析thinkphp框架函数调用图
- C++文件读写详解(ofstream,ifstream,fstream)
- 人脸识别“DeepID”
- centos6.7 配置多个ip
- 深入理解JVM之六:类加载机制
- 链队列
- json parser 数据转化
- 中缀表达式转后缀表达式 并计算后缀表达式
- 工作笔记—转自原作者
- iOS CoreBluetooth 教程
- Unity3d中设置UISprite图片灰显方法
- jquery的ajax同步和异步
- PHP中魔术常量
- HBase权威指南 高清中文版 PDF(来自linuxidc)
- CSS 笔记
- 实例代码讲解jquery easyui动态tab页
- sed 学习笔记2
- pid学习整理
- PHP环境搭建之PHPstorm9+PHP5开发环境配置
- 记住密码